使用SELECT COUNT子查询INSERT INTO返回null

时间:2013-11-10 18:39:13

标签: mysql sql sql-insert nested-query

我有一张桌子,里面有练习,每次练习都有一些插图在另一张桌子上。我想插入插图并按照“位置”属性进行订购。 因此,当我添加插图时,'position'属性等于给定练习的插图数(因为位置从0开始)。

所以我尝试了类似的东西:

INSERT INTO illustrations (path, date_creation, id_exercise, position) 
VALUES (
    "2789c0bdda6981fadd87c30af74dfc5d.jpg", 
    "1384104485", 
    "4",  
    (SELECT COUNT(I.id)  
     FROM illustrations I 
     WHERE I.id_exercise = 4 
     GROUP BY I.id_exercise
    )
)

这个查询工作正常,但前提是我已经至少有一个练习插图。否则,子查询返回null并且我得到此错误:“列'位置'不能为空”这是合乎逻辑的。通常,如果select子查询返回null,我会将零。我试过ISNULL(),但我找不到正确的语法。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

使用COALESCE将子查询的空结果更改为默认值。

INSERT INTO illustrations (path, date_creation, id_exercise, position) 
VALUES (
   "2789c0bdda6981fadd87c30af74dfc5d.jpg", 
   "1384104485", 
   "4",  
   COALESCE((SELECT COUNT(I.id)  
     FROM illustrations I 
     WHERE I.id_exercise = 4 
   ), 0)
)

此外,GROUP BY是不必要的。