在带有where条件的重复密钥上



我正在尝试对包含ON DUPLICATE KEYINSERT INTO语句使用WHERE条件。下面是我努力实现的一个例子。

此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; 

使用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是表名的占位符。

我猜您想要来自卫星的内部名称,并在您的表中搜索它

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

最新更新