在具有 where 条件的重复键上

on duplicate key with a where condition

我正在尝试对包含 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。然后可以加个条件忽略name

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 是 table 名称的占位符。

我猜你想要卫星的内部名称并在你的 table

中搜索它
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);