首页 > 解决方案 > 在具有 where 条件的重复键上

问题描述

我正在尝试WHEREINSERT INTO包含ON DUPLICATE KEY. 下面是我想要实现的一个示例。

这条 SQL 语句被第三方软件调用,我们想根据数值排除一些导出,在本例中为 2。所以,当 X != Y 执行 INSERT 时,如果 X == Y,则不要。

INSERT INTO satellites (name, intname) VALUES ('%SATELLITE.NAME%','%SATELLITE.INTNAME%') ON DUPLICATE KEY UPDATE name='%SATELLITE.NAME%',intname='%SATELLITE.INTNAME%'  WHERE '%SATELLITE.NAME%' != 2; 

标签: mysqlwhere-clausesql-inserton-duplicate-key

解决方案


使用SELECT查询而不是VALUES. 然后你可以添加一个条件来忽略名字

INSERT INTO satellites (name, intname)
SELECT '%SATELLITE.NAME%' AS name, '%SATELLITE.INTNAME%'
FROM DUAL
HAVING name != 2
ON DUPLICATE KEY UPDATE name = VALUES(name), intname = VALUES(intname)

请注意,在该ON DUPLICATE KEY UPDATE子句中,您不需要指定对唯一键列的分配,因为它不会改变(因为那是重复的)。但是我不知道哪个是唯一键,所以我没有删除它。

DUAL当您只选择文字值时,它是表名的占位符。


推荐阅读