我想要做的是经典的插入或更新案例,但使用'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
语句无论如何都没有帮助。
答案 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)
。