Wis*_*tar 2 mysql sql insert on-duplicate-key
让我们考虑一下,我有一个用于生成表B的表A.我没有可用于a的主键或唯一键ON DUPLICATE KEY.
我的表B有3列:A,B和C.
INSERT只有当行已经不存在时我才想这样做.我可以确定该行是否存在是A和B的组合.我使用一个WHERE NOT EXISTS语句来执行此操作.
INSERT INTO TableB
(A, B, C)
SELECT
SUM(A),
SUM(B),
SUM(C)
FROM TableA
WHERE NOT EXISTS (SELECT * FROM TABLE B WHERE A=A AND B=B)
GROUP BY A, B
Run Code Online (Sandbox Code Playgroud)
如果表B为空,则插入行.但是,只要表B有记录,即使表B中不存在行,也不会插入任何行.
你应该从它的子查询别名外查询前缀的列:
INSERT INTO TableB (A, B, C)
SELECT
SUM(A),
SUM(B),
SUM(C)
FROM TableA ta
WHERE NOT EXISTS (SELECT * FROM TableB tb WHERE tb.A=ta.A AND tb.B=ta.B)
GROUP BY A, B
Run Code Online (Sandbox Code Playgroud)
你的方式写的,你是从表中比较值TableB与值TableB(与自己的每一行),所以当你插入至少一行,"有没有行等于自己"的条件是不正确的.