前提・実現したいこと
下記テーブルにおいて、女性(Gender列がF)の給料は20万円以下(Salary列が200000以下)、という条件をcheck制約で表現したのが次のSQL文です。
sql
1alter table student 2add constraint check_salary 3check 4(case when Gender = 'F' 5 then case when salary <= 200000 6 then 1 else 0 end 7 else 1 end = 1)
このSQL文は参考書に書いてあったのを、SqlServer用のSQL文に軽く手直ししたモノです。
だから正常に動きます。
ただわからない点が1つあるのです。
SQL文の末尾にある、「end = 1」の「= 1」 がなぜ必要なのか分かりません。
追記
リンク内容
同じ質問をしている方がいました。しかし、end = 1の =1がなぜ必要なのかは
わからないです。
case 文が長いのですが構造は x = 1 と同じです。x の部分が入れ子の case 式です。
リンク先に上記コメントがありましたが、理解ができません。
end = 1の直前にある記述「else 1」で、「男の場合は1とする。つまり、
制約の対象にはならない」が実現していると思うのです。
試したこと
sql
1alter table student 2add constraint check_salary 3check 4(case when Gender = 'F' 5 then case when salary <= 200000 6 then 1 else 0 end 7 else 1 end)
末尾「=1」を削除した上記SQL文を試すと、次のようなエラーが出ましたが、理解できません。
条件が必要なコンテキストに対し、')' 付近でブール型以外の式が指定されました。
補足情報(FW/ツールのバージョンなど)
sqlservermanagementstudio v18.7.1

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/14 16:39
2020/12/14 16:50