MySql在引用值时在重复键内选择聚合
我有两个表:表1和表2,每个表都有3个字段:(a,b,c)和(x,y,z)都是整数(另外假设每个表都有一个PK字段,这部分并不重要) 我希望能够将表2中的多行插入表1,并且在遇到重复键时,使用原始键更新表1中的行,并将一些字段的值设置为与在没有重复键事件的情况下插入的值相关的各种函数 更具体地说,这是:MySql在引用值时在重复键内选择聚合,mysql,Mysql,我有两个表:表1和表2,每个表都有3个字段:(a,b,c)和(x,y,z)都是整数(另外假设每个表都有一个PK字段,这部分并不重要) 我希望能够将表2中的多行插入表1,并且在遇到重复键时,使用原始键更新表1中的行,并将一些字段的值设置为与在没有重复键事件的情况下插入的值相关的各种函数 更具体地说,这是: INSERT INTO table1 (id, a, b, c) SELECT 1, x, SUM(y), COUNT(z) -- for my example to happen,
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。我认为问题在于试图在堆栈的另一个select中引用值(a)
(在发生“复制键”事件之前应该插入到“a”字段中的值)。
如果我修改查询并删除最后一行,其中的值(a)=t2.x
,那么答案就是预期的答案