尝试“插入重复键上的选择”时出现Mysql错误

时间:2015-06-03 16:14:05

标签: mysql

我想要做的是经典的插入或更新案例,但使用'select'而不是'values'。在这种情况下,我不认为确切的数据库结构很重要,假设我在示例中使用的所有字段都是整数。我尝试运行2个案例,但它们都会产生错误:

INSERT INTO table1 (a, b, c) 
    SELECT x, SUM(y), COUNT(z)
    FROM table2
ON DUPLICATE KEY UPDATE b = b + x;

这会产生

  

错误代码:1054。“字段列表”中的未知列'x'

第二种情况:

INSERT INTO table1 (a, b, c) 
    SELECT x, SUM(y), COUNT(z)
    FROM table2
ON DUPLICATE KEY UPDATE b = b + count(z);

这会产生

  

错误代码:1111。无效使用群组功能

在这两种情况下,如果我删除重复的密钥语句,一切正常。此外,在这两种情况下,我想在表1中更新b时使用的值是“select”中发生重复键的行中的值。我猜这与使用的聚合函数有关,但我不知所措。插入GROUP BY语句无论如何都没有帮助。

1 个答案:

答案 0 :(得分:2)

使用VALUES()功能:

INSERT INTO table1 (a, b, c) 
    SELECT x, SUM(y), COUNT(z)
    FROM table2
ON DUPLICATE KEY UPDATE b = b + VALUES(a);

第二种情况将使用VALUES(c)而不是VALUES(a)