[pgsql-jp: 27380] Re: 複数条件の一致検索について
HIROSHI OOTA
oota @ LSi.nec.co.jp
2002年 9月 11日 (水) 16:14:18 JST
太田(逃避中)と申します。
;; デバイスの状態を格納するテーブル
;; device
;; device_id INTEGER
;; status INTEGER
;; というのがあったとします。
;;
;; ここから複数のデバイスがある一定の条件を満たしたかどうかを判定したいのです。
;; そこで条件群を定義するテーブルを作ります。
;; condition
;; cond_id INTEGER
;;
;; 条件群の中身は別のテーブルに格納します。
;; each_condition
;; cond_id INTEGER
;; device_id INTGER
;; status INTEGER
;;
;; で、あるcond_idで示す条件群が成立したかどうかを調べるSQL文ってどう書けばいいで
;; しょうか?
効率のことは考慮していませんが、
SELECT * FROM each_condition AS c WHERE
NOT EXISTS (SELECT * FROM each_condition AS c1
LEFT JOIN device AS d ON
c1.device_id = d.device_id AND
c1.status = d.status
WHERE d.device_id IS NULL AND c.cond_id = c1.cond_id);
でいかがでしょう?
SELECT * FROM each_condition AS c1
LEFT JOIN device AS d ON
c1.device_id = d.device_id AND
c1.status = d.status
WHERE d.device_id IS NULL
で、不成立な条件群をいったんテンポラリテープルに格納しておいて、これと演算
する方が早いかもしれません。
--
HIROSHI OOTA
oota @ LSi.nec.co.jp
pgsql-jp メーリングリストの案内