可以在ON DUPLICATE KEY中使用聚合值吗?

时间:2013-07-24 15:02:43

标签: mysql sql

我正在尝试编写类似于:

的查询
INSERT INTO SomeTable(field1, field2) 
SELECT 'blah' AS field1, 
        MAX(AnotherTable.number) AS field2
FROM AnotherTable
ON DUPLICATE KEY 
UPDATE field1= 'blah', field2 = MAX(AnotherTable.number)

我收到错误代码:1111 组功能的使用无效。

阅读MySql文档:

http://dev.mysql.com/doc/refman/5.1/en/insert-select.html

感兴趣的行是:

在ON DUPLICATE KEY UPDATE的值部分,您可以参考其他表中的列,只要您在SELECT部分​​中不使用GROUP BY。一个副作用是您必须限定非唯一列值部分中的名称。

这是我看到的问题吗?我没有专门在Select语句中执行GROUP BY,但是通过使用聚合函数(Max),我可能会隐式分组。

如果有人确切知道我是否隐含地进行了GROUP BY,或者有任何其他方式我可以获得所需的结果,那么我会非常感激。

2 个答案:

答案 0 :(得分:7)

我知道我在这里回答了我自己的问题,但是......

这最终让它发挥作用(感谢:http://www.getrouty.com/mysql-insert-select-on-duplicate-update-using-aggregate-functions/

INSERT INTO SomeTable(field1, field2) 
SELECT 'blah' AS field1, 
    MAX(AnotherTable.number) AS field2
FROM AnotherTable
ON DUPLICATE KEY 
UPDATE field2 = values(field2)

答案 1 :(得分:1)

如果有效,请试试:

INSERT INTO SomeTable(field1, field2) 
SELECT * FROM (
SELECT * FROM (
SELECT 'blah' AS field1, 
        MAX(AnotherTable.number) AS field2
FROM AnotherTable
) sq
) sq2
ON DUPLICATE KEY 
UPDATE field1= 'blah', field2 = sq2.field2

不确定是否需要2次子查询。我通常使用它来规避MySQL的限制,以便无法使用从同一个表中读取的值更新表。不确定这是否也适用于此。