增加列位置

时间:2018-02-24 15:44:58

标签: mysql

以下代码完美地处理了现有数据:

INSERT INTO `cats`(`id`, `parent_id`, `name`, `slug`, `position`) 
VALUES ('',0,'Test4','test4',(SELECT MAX(position)+1 FROM cats as g WHERE parent_id = 0));

来自mysql的数据

-------------------------------------------
id | parent_id |  name  |  slug  | position
-------------------------------------------
1      0          test     test      1
2      0          test2    test2     2
3      2          test3    test3     1

当我尝试使用以下代码添加新记录时

INSERT INTO `cats`(`id`, `parent_id`, `name`, `slug`, `position`) 
VALUES ('',1,'Test4','test4',(SELECT MAX(position)+1 FROM cats as g WHERE parent_id = 1));

结果是:#1048 - 列'位置'不能为空

如果可能的解决方案有一个命令?

1 个答案:

答案 0 :(得分:1)

您在每个parent_id中使用了不同的insert值。

也许是您的查询

(SELECT MAX(position)+1 FROM cats as g WHERE parent_id = 1)

返回NULL值。

也许如下所示使用COALESCE - 强制值为1,例如:

COALESCE((SELECT MAX(position)+1 FROM cats as g WHERE parent_id = 1),1)

链接here

编辑:

这是正确的方法,但在子查询中执行coalesce()会更有效:

(SELECT COALESCE(MAX(position), 1) FROM cats as g WHERE parent_id = 1)