我正在尝试对包含ON DUPLICATE KEY
的INSERT 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);