如何在IF语句中使用INSERT INTO SELECT ON DUPLICATE KEY UPDATE

时间:2019-12-09 05:34:15

标签: mysql database sql-insert on-duplicate-key

在这里,我试图在给定条件下对MySQL中的重复键更新进行记录。 假设我有一个名为“ Item”的表,另一个名为“ Item_backup”的表,该表具有一组应插入到原始“ Item”表中的备份记录。这两个表的两个表的结构相同。

在插入数据记录时,如果有任何重复键,那么我需要检查insert_date列,并且仅当“ Item”表中的insert_date列小于“ Item_backup”表中的insert_date列。

我使用的查询是

INSERT INTO ITEM (item_number, price, quantity, insert_date)
SELECT ib.item_number, ib.price, ib.quantity, ib.insert_date 
FROM ITEM_backup ib
ON DUPLICATE KEY UPDATE
item_number = IF(@is_a_new_record := insert_date < ib.insert_date, ib.item_number, item_number),
price = IF(@is_a_new_record, ib.price, price),
quantity = IF(@is_a_new_record, ib.quantity, quantity),
insert_date = IF(@is_a_new_record, ib.insert_date, insert_date);

现在这样的错误越来越严重, “ SQL错误:字段列表中的列'insert_date'不明确”

任何人都可以指出此查询出了什么问题吗?

1 个答案:

答案 0 :(得分:0)

最后,我找到了正确的答案。

INSERT INTO ITEM (item_number, price, quantity, insert_date)
SELECT ib.item_number, ib.price, ib.quantity, ib.insert_date 
FROM ITEM_backup ib
ON DUPLICATE KEY UPDATE
item_number = IF(@is_a_new_record := ITEM.insert_date < ib.insert_date, ib.item_number, ITEM.item_number),
price = IF(@is_a_new_record, ib.price, ITEM.price),
quantity = IF(@is_a_new_record, ib.quantity, ITEM.quantity),
insert_date = IF(@is_a_new_record, ib.insert_date, ITEM.insert_date);