Insert with on duplicate key update 给出错误 1064

Insert with on duplicate key update gives error 1064

我正在尝试使用此查询,但无论我做什么我都无法让它工作。我对 on duplicate key update 语法还是很陌生,但我找不到任何问题

INSERT INTO product_leverancier (product_id, leverancier_id, prijs) 
SELECT i.product_id, i.leverancier_id, i.prijs FROM import_tbl i 
ON DUPLICATE KEY UPDATE product_id=VALUES(product_id), 
leverancier_id=VALUES(leverancier_id), prijs=VALUES(prijs)

我得到的错误是:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE product_id=VALUES(product_id), leverancier_id=VALUES(leverancier_id), pr' at line 2 Error code 1064.

无论我更改什么,它始终是相同的错误和错误代码。 知道问题出在哪里吗?

您的语法有点不对,我不认为在使用 SELECT 作为插入源时使用了 VALUES。相反,使用该来源 table 作为更新值:

INSERT INTO product_leverancier (product_id, leverancier_id, prijs) 
SELECT i.product_id, i.leverancier_id, i.prijs
FROM import_tbl i 
ON DUPLICATE KEY UPDATE
    product_id     = i.product_id, 
    leverancier_id = i.leverancier_id,
    prijs          = i.prijs

请注意,引用源 table 中的列时需要别名 i

这是一个很好的参考问题,它深入研究了 ON DUPLICATE KEY UPDATEINSERT INTO ... SELECT 一起使用时的语法:

INSERT INTO ... SELECT FROM ... ON DUPLICATE KEY UPDATE

你试过吗?

ON DUPLICATE KEY UPDATE 
    product_leverancier.product_id = i.product_id, 
    product_leverancier.leverancier_id = i.leverancier_id,
    product_leverancier.prijs = i.prijs