[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 メーリングリストの案内