4

我正在尝试编写类似于以下内容的查询:

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 或者是否有任何其他方式可以获得所需的结果,我将非常感激。

4

2 回答 2

8

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

这最终让它工作(感谢:一个断开的链接

INSERT INTO SomeTable(field1, field2) 
SELECT 'blah' AS field1, 
    MAX(AnotherTable.number) AS field2
FROM AnotherTable
ON DUPLICATE KEY 
UPDATE field2 = values(field2)
于 2013-07-24T15:24:06.833 回答
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 的限制,即无法使用从同一个表中读取的值更新表。不确定这是否也适用于此。

于 2013-07-24T15:09:35.647 回答