【发布时间】:2013-11-06 21:35:51
【问题描述】:
假设我有一个用于生成表 B 的表 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
如果表 B 为空,则插入该行。但是,一旦表 B 有记录,即使表 B 中不存在行,也不会插入任何行。
【问题讨论】:
-
为什么不使用
UNIQUE(A, B, C)? -
@Fozi 因为 A 可以重复。 B 也可以如此重复,但只有两者的组合才是独一无二的。这是我使用的数据的性质。
-
Ant 这正是
UNIQUE(A, B, C)将为您做的事情;和UNIQUE(A) UNIQUE(B) UNIQUE(C)不一样。 -
对不起,我看错了问题:应该是
UNIQUE(A, B) -
@Fozi 我不知道。你在这里提出了一个很好的观点。谢谢。
标签: mysql sql insert on-duplicate-key