SQL表无数据时插入记录设置sortingOrder为1的实现方法
问题根因
当faq表无任何数据时,SELECT MAX(sortingOrder) FROM faq 会返回NULL,NULL + 1的运算结果仍为NULL,不符合sortingOrder字段的取值要求,因此触发报错。
修复方案
使用SQL标准函数COALESCE()处理NULL值即可,该函数会返回参数列表中第一个非NULL的值,修改后的SQL语句如下:
INSERT INTO faq (question, answer, sortingOrder) VALUES ('$questionData', '$answerData', COALESCE((SELECT MAX(sortingOrder) FROM faq C), 0) + 1)
逻辑说明
- 当faq表存在数据时:
MAX(sortingOrder)返回有效数值,COALESCE直接返回该数值,加1后作为新记录的排序值,和原有逻辑完全一致 - 当faq表为空时:
MAX(sortingOrder)返回NULL,COALESCE会返回预设的默认值0,加1后得到1,刚好满足空表第一条记录的排序值要求
补充:部分数据库专有函数也可实现相同效果,比如MySQL可用
IFNULL()、SQL Server可用ISNULL()替换上述语句中的COALESCE(),执行结果完全一致。
内容的提问来源于stack exchange,提问作者Luke Wilson
相关产品推荐
相关产品推荐

