2階層構造のテーブルで親を求める

前提

階層構造を表すテーブルtblを考える。

スキーマ

  • id PK
  • p_id 親ID(parent id)
  • name IDの名前

データ

  id | p_id | name
 ----+------+------
   1 |    1 | A
   2 |    2 | B
  10 |    1 | A1
  11 |    1 | A2
  12 |    1 | A3
  13 |    2 | B1
  14 |    2 | B2
 CREATE TABLE tbl (id int, p_id int, name text) ;
 INSERT INTO tbl VALUES ( 1,1,'A' ), ( 2,2,'B' );
 INSERT INTO tbl VALUES ( 10,1,'A1' ) , ( 11,1,'A2' ) , ( 12,1,'A3' );
 INSERT INTO tbl VALUES ( 13,2,'B1' ), ( 14,2,'B2' );

親IDの名前を求める

 SELECT t1.id, t1.p_id, t1.name, t2.name FROM tbl t1 JOIN tbl t2 ON t1.p_id = t2.id ORDER BY t1.id;
  id | p_id | name | name
 ----+------+------+------
   1 |    1 | A    | A
   2 |    2 | B    | B
  10 |    1 | A1   | A
  11 |    1 | A2   | A
  12 |    1 | A3   | A
  13 |    2 | B1   | B
  14 |    2 | B2   | B

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2011-06-11 (土) 16:48:01