2

内部にエクササイズが入ったテーブルがあり、エクササイズごとに別のテーブルにいくつかのイラストがあります。イラストを挿入して「位置」属性で並べておきたいです。したがって、イラストを追加すると、「位置」属性は、指定された演習のイラストの数と等しくなります (位置は 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
    )
)

このクエリは正常に機能しますが、演習用の図が少なくとも 1 つある場合に限ります。それ以外の場合、サブクエリは null を返し、論理的な「列 'position' を null にすることはできません」というエラーが表示されます。通常、select サブクエリが null を返す場合はゼロを入力します。ISNULL() を試しましたが、正しい構文が見つかりません。なにか提案を ?

4

1 に答える 1

3

COALESCEサブクエリの null 結果をデフォルト値に変更するために使用します。

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不要でした。

于 2013-11-10T18:40:53.740 に答える