sql postgresのEXISTSの使い方
2011/06/17
postgresのEXISTSの使い方が分かりづらいので少しずつ分解してみる。
慣れるまで時間かかりそうだし、使いドコもよくわかんない。
テーブルの構成は下記のような感じ。
テーブル名:tableA
カラム(型):id(serial),title(text)
カラム(型):id(serial),title(text)
テーブル名:tableB
カラム(型):id(serial),id_tableA(int),data(text)
今回、必要なものは下記。
「tableA.title」が「test」で「tableB.data」が空っぽの「tableA.id」が欲しい。
まずはEXISTSを使わないやり方
- select a.id
- from tableA a left join tableB b on a.id=b.id_tableA
- where a.title='test' and b.data is null
select句で必要なカラムを指定
「tableA.id」が欲しい。
from句でテーブルとテーブルを連結
「tableA.id」と「tableB.id_tableA」を紐付けして「tableA」と「tableB」を連結。
where句で条件を指定
「tableA.title」の値が「test」で、しかも「tableB.data」の値が「空っぽ(NULL)」のものを指定する。
EXISTSを使うやり方
- select a.id
- from tableA a
- where a.title='test'
- and EXISTS (
- select null
- from tableB b
- where b.data is null and a.id=b.id_tableA
- )
select句で必要なカラムを指定
「tableA.id」が欲しい。
from句で使用するテーブルを指定
「tableA」を使う。
where句で条件を指定
「tableA.title」の値が「test」。
さらに『「tableB.data」の値が「空っぽ(NULL)」で、「tableA.id」と「tableB.id_tableA」が同じ』という条件が成立するモノを指定する。