【问题标题】:ON DUPLICATE KEY UPDATE not working in online sql editorsON DUPLICATE KEY UPDATE 在在线 sql 编辑器中不起作用
【发布时间】:2021-12-25 09:08:39
【问题描述】:

我正在使用可以运行代码的在线代码编辑器来学习 SQL,例如techonthenet.com 或 w3schools。问题是,ON DUPLICATE KEY UPDATE 命令似乎在这些编辑器中不起作用。这是一个示例 https://www.techonthenet.com/sql/select_try_sql.php 的链接。我正在尝试更新客户数据库。如果我只使用 INSERT 命令,它似乎工作正常,但是当我尝试 ON DUPLICATE KEY UPDATE 时,我收到此错误:

SyntaxError: Parse error on line 2:
..., 'new first name')ON DUPLICATE KEY UPD
----------------------^
Expecting 'EOF', 'COMMA', 'RPAR', 'END', 'WHEN', 'ELSE', 'OUTPUT', 'GO', 'SEMICOLON', got 'ON'

我的代码如下所示:

INSERT INTO customers (customer_id, last_name, first_name)
VALUES ('4000', 'new last name', 'new first name')
ON DUPLICATE KEY UPDATE last_name = 'new last name', first_name = 'new first name';

是我做错了什么还是那些网站没有完全正常运行?

【问题讨论】:

  • 这是 INSERT 语句的 MySQL/MariaDB 特定扩展 - 不是 ANSI/ISO SQL 标准功能。它通常受到任何其他 RDBMS 引擎的支持,因此根据这些在线网站所建模的引擎,这显然不起作用....
  • 哦,谢谢你的解释。有没有办法在标准 SQL 中实现类似的结果(即插入新值或替换旧值)而无需任何扩展?

标签: sql on-duplicate-key


【解决方案1】:

MERGE INTO 是标准 Sql。
但是techonthenet似乎不支持upserts

MERGE INTO customers tgt
USING (
  SELECT 
    4000 AS customer_id,
    'new last name' AS last_name, 
    'new first name' AS first_name
) src ON (src.customer_id = tgt.customer_id)
WHEN MATCHED THEN
    UPDATE SET last_name = src.last_name
             , first_name = src.first_name
WHEN NOT MATCHED THEN
    INSERT (customer_id, last_name, first_name) 
    VALUES (src.customer_id, src.last_name, src.first_name)

【讨论】:

    猜你喜欢
    • 2020-07-20
    • 2012-05-15
    • 2011-05-05
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 2011-05-16
    相关资源
    最近更新 更多