我有两个表:table1和table2,每个表都有3个字段:(a,b,c)和(x,y,z)所有整数(除了让每个人说另一个PK字段)部分并不重要。)
我希望能够将table2中的多行插入到table1中,并且当遇到重复键时,使用原始键更新表1中的行,并将某些字段的值设置为等于涉及值的各种函数的值在没有重复键事件的情况下插入的内容。
更具体地说,这个:
INSERT INTO table1 (id, a, b, c)
SELECT 1, x, SUM(y), COUNT(z) -- for my example to happen, 1 is the duplicate key
FROM table2
GROUP BY x
ON DUPLICATE KEY UPDATE
b = b + VALUES(b),
c = (SELECT COUNT(DISTINCT x)
FROM table2 t2
WHERE VALUES(a) = t2.x);
我进行了一些测试,并且在重复键上“' b'字段已正确更新,但c字段正在重置为0.我认为问题是尝试引用VALUES(a)
(应该在' a'字段中插入的值&# 39;重复键'事件发生在另一个选择内的堆栈中。
如果我修改查询并删除最后一行WHERE VALUES(a) = t2.x
,答案就是预期的答案。