EXISTS
あるかないかを判定できます。
EXISTS ( subquery )
EXISTSの中に、SELECT文を書き、値があればTRUEです。
EXISTS(SELECT id FROM history WHERE id = master.id)
これで、historyテーブルにidがあり、なおかつmasterテーブルにidがあれば、TRUEとなります。
副問い合わせは最後の完結まで行かずに、一般的に少なくとも一つの行が返されたかどうかを判定し得るに足りる時点まで実行されます。
CASE
SQLのSELECT文中に分岐を行う事ができます。CASEは条件分岐を行うために利用します。判定式を書いて、これがTRUEの場合と、FALSEの場合で表示する内容を変更できます。
SELECT
CASE
WHEN [判定] THEN [判定がTRUEだったら表示する内容]
ELSE [判定がTRUEでなければ表示する内容]
END
FROM [テーブル名];
これを使う事で、CASEと組み合わせ
SELECT id,
CASE
WHEN EXISTS(SELECT id FROM history WHERE id = master.id) THEN 2
ELSE 1
END as group_id
FROM master
masterテーブルにあるID一覧に対し、historyテーブルに同じIDがあれば2と表示させ、なければ1と表示させる事が可能です。
コメント