我正在尝试编写类似于:
的查询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,或者有任何其他方式我可以获得所需的结果,那么我会非常感激。
答案 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的限制,以便无法使用从同一个表中读取的值更新表。不确定这是否也适用于此。