mysql - 如何在 IF 语句中使用 INSERT INTO SELECT ON DUPLICATE KEY UPDATE
问题描述
在这里,我试图在给定条件下对 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' 不明确”
谁能指出这个查询有什么问题?
解决方案
最后,我找到了正确的答案。
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);
推荐阅读
- javascript - 按钮单击呈现多个不需要的组件 React
- r - Column manipulation in R - matching correct names
- oracle - PL/SQL 触发器不会运行
- java - Does MyBatis follows JPA?
- apache - 浏览器的Linux目录快捷方式路径
- javascript - 如何引用在同一类中创建的事件侦听器中的类?
- java - 将 Android Studio 项目连接到 Firebase 数据库的问题
- wordpress - 联系表格 7 wordpress 插件消息条件
- javascript - 可缩放的旭日形
- javascript - 当我有n个ID时,如何在鼠标悬停时显示特定的div?