具有聚合值的MySQL INSERT ... SELECT失败,CASE语句未找到Case

时间:2013-02-21 16:15:37

标签: mysql sql aggregate-functions

我想从汇总查询的输出中向表中插入一个新行:

INSERT INTO table_name (id) SELECT MAX(id) + 1 FROM table_name;

但它失败并出现以下错误:

ERROR 1339 (20000): Case not found for CASE statement

如果我将+ 1部分添加到聚合函数中,如下所示:

INSERT INTO table_name (id) SELECT MAX(id + 1) FROM table_name;

它产生相同的错误。如果我删除+ 1部分,它当然会失败,因为id是主键:

ERROR 1062 (23000): Duplicate entry '48' for key 'PRIMARY'

如何在不修改表结构的情况下在MySQL 5.5.29-0ubuntu0.12.10.1中实现这一点?

更新

这可能是因为原始表中缺少非空字段,如果我明天发现它,我会在这里发布解决方案。

2 个答案:

答案 0 :(得分:2)

由于您希望将最后一个ID增加1,为什么不对列AUTO_INCREMENT使用ID列。

CREATE TABLE tableName
(
    ID INT AUTO_INCREMENT PRIMARY KEY,
    ....
)

答案 1 :(得分:1)

虽然错误说的不同,但问题的原因是插入中缺少非NULL字段。

填写每个字段会产生正确的MAX(id) + 1查询。