以下代码完美地处理了现有数据:
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 - 列'位置'不能为空
如果可能的解决方案有一个命令?
答案 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)