在具有 where 条件的重复键上
on duplicate key with a where condition
我正在尝试对包含 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
。然后可以加个条件忽略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);
我正在尝试对包含 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
。然后可以加个条件忽略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);