sql postgresのEXISTSの使い方

2011/06/17

postgresのEXISTSの使い方が分かりづらいので少しずつ分解してみる。
慣れるまで時間かかりそうだし、使いドコもよくわかんない。

テーブルの構成は下記のような感じ。

テーブル名:tableA
カラム(型):id(serial),title(text)

テーブル名:tableB
カラム(型):id(serial),id_tableA(int),data(text)

今回、必要なものは下記。

「tableA.title」が「test」で「tableB.data」が空っぽの「tableA.id」が欲しい。

まずはEXISTSを使わないやり方

  1. select a.id
  2. from tableA a left join tableB b on a.id=b.id_tableA
  3. 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を使うやり方

  1. select a.id
  2. from tableA a
  3. where a.title='test'
  4.   and EXISTS (
  5.     select null
  6.     from tableB b
  7.     where b.data is null and a.id=b.id_tableA
  8.   )

select句で必要なカラムを指定

「tableA.id」が欲しい。

from句で使用するテーブルを指定

「tableA」を使う。

where句で条件を指定

「tableA.title」の値が「test」。
さらに『「tableB.data」の値が「空っぽ(NULL)」で、「tableA.id」と「tableB.id_tableA」が同じ』という条件が成立するモノを指定する。

新着(ニュース関連以外)

2017-08-03
formのinputでmaxlengthを使うとFirefoxでバグってた。他のブラウザでも気づかずにバグってたかもしれない。
2017-07-19
折れ線グラフをもう少しゆるやかに・・・というか何というか・・・調べていくと「移動平均」っていう言葉にたどり着いた
2017-07-10
FuelPHPの1.8をダウンロードして使っていたらセッションが使えないということに気付いた。
2017-06-27
MACにWin10をインストールしてみた:再挑戦。
2017-06-25
「簡単」っていうヤツらが多いけど・・・難しいぞ。