Postgres 副問い合わせ SELECTした値が他のテーブルにあるかないかをEXISTSで確認して、列を作る

イラスト postgres

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と表示させる事が可能です。

コメント

タイトルとURLをコピーしました