#navi(ORACLE) *階層問い合わせ [#u3cc11ad] 親組織コードのついた組織テーブルで、ある組織コード以下をすべて取得する SQL 文です。(階層問い合わせを使っています。) ** 組織テーブルを作ります。 [#g7947730] CREATE TABLE DIR ( DCD VARCHAR2(10) NOT NULL, PCD VARCHAR2(10), DNAME VARCHAR2(30) ) / COMMENT ON COLUMN DIR.DCD IS '組織コード' / COMMENT ON COLUMN DIR.PCD IS '親組織コード' / COMMENT ON COLUMN DIR.DNAME IS '組織名称' / ** データを入力します [#w545b754] INSERT INTO DIR (DCD, PCD, DNAME) VALUES('0000',NULL,'組織0000'); INSERT INTO DIR (DCD, PCD, DNAME) VALUES('A100','0000','組織A100'); INSERT INTO DIR (DCD, PCD, DNAME) VALUES('A110','A100','組織A110'); INSERT INTO DIR (DCD, PCD, DNAME) VALUES('A111','A110','組織A111'); INSERT INTO DIR (DCD, PCD, DNAME) VALUES('A111-1','A111','組織A111-1'); INSERT INTO DIR (DCD, PCD, DNAME) VALUES('A111-2','A111','組織A111-2'); INSERT INTO DIR (DCD, PCD, DNAME) VALUES('B100','0000','組織B100'); INSERT INTO DIR (DCD, PCD, DNAME) VALUES('B110','B100','組織B110'); INSERT INTO DIR (DCD, PCD, DNAME) VALUES('B111','B110','組織B111'); INSERT INTO DIR (DCD, PCD, DNAME) VALUES('C100','0000','組織C100'); ※ 以下のような構造の組織です +- A100 - A110 - A111 + A111-1 | | | + A111-2 0000 -+- B100 - B110 - B111 | +- C100 ** A100 以下の組織を取得 [#x83a3643] select * from DIR start with DCD='A100' connect by prior DCD = PCD / DCD PCD DNAME ---------- ---------- --------------------- A100 0000 組織A100 A110 A100 組織A110 A111 A110 組織A111 A111-1 A111 組織A111-1 A111-2 A111 組織A111-2 ** A110 以下の組織を取得 [#u2e40e41] select * from DIR start with DCD='A110' connect by prior DCD = PCD / DCD PCD DNAME ---------- ---------- --------------------- A110 A100 組織A110 A111 A110 組織A111 A111-1 A111 組織A111-1 A111-2 A111 組織A111-2 ** 0000 以下の組織を取得 [#i8479303] select * from DIR start with DCD='0000' connect by prior DCD = PCD / DCD PCD DNAME ---------- ---------- --------------------- 0000 組織0000 A100 0000 組織A100 A110 A100 組織A110 A111 A110 組織A111 A111-1 A111 組織A111-1 A111-2 A111 組織A111-2 B100 0000 組織B100 B110 B100 組織B110 B111 B110 組織B111 C100 0000 組織C100 #vote(参考になった[4],参考にならなかった[1]) #vote(参考になった[5],参考にならなかった[1])