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」が同じ』という条件が成立するモノを指定する。

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

2018-07-26
年賀状で「新春」とか書くけど・・・何故なんだろうと8月を目前にした今、疑問に思った。
2018-05-16
PHPで画像のヘッダ情報(?)の「Orientation」を元に画像回転させたい。
2018-03-05
Android Studioをインストール。エミュレータを軽くするトコまで終わらせたかったけど、挫折した。
2018-02-23
プッシュ通知について調べてた時にでてきたServiceWorker。そのServiceWorkerについてのメモ。
2017-12-13
jqueryで取得したDOM要素をオブジェクトじゃなくて、配列で受け取りたい