[pgsql-jp: 30777] SQL(等価結合の変形版?)
    kenbooit @ excite.co.jp
    kenbooit @ excite.co.jp
       
    2003年 8月 14日 (木) 18:36:51 JST
    
    
  
始めまして。島田と申します。
SQL に関する質問です。
よろしくお願い致します。
[test]テーブル
 id     | code1   | code2
--------+---------+---------
 A      | 5000    |
 B      | 4000    | 4001
 C      | 4500    |
 D      | 5020    | 5021
 E      | 3000    | 3001
[test2]テーブル
 name |  dept  | number
------+--------+--------
 三好 | 人事部 | 3000
 本田 | 人事部 | 3001
 佐藤 | 人事部 | 4000
 吉田 | 人事部 | 4001
 鈴木 | 開発部 | 4500
 田中 | 総務部 | 5000
 伊藤 | 経理部 | 5020
 前田 | 経理部 | 5021
上のような2つのテーブルがあったとして、
下のSQLを実行すると
 SELECT  t2.id,
         t2.button1, t1.name as name1, t1.dept as dept1,
         t2.button2, t1.name as name2, t1.dept as dept2
 FROM test t1, test2 t2
 WHERE t1.number = t2.button1 or t1.number = t2.button2
 ORDER BY t2.id
当然のことながら下記結果が返ってきます。
 id     | button1 | name1 | dept1  | button2 | name2 |
dept2
--------+---------+-------+--------+---------+-------+--------
 A      | 5000    | 田中  | 総務部 |         | 田中  | 総務部
 B      | 4000    | 佐藤  | 人事部 | 4001    | 佐藤  | 人事部
 B      | 4000    | 吉田  | 人事部 | 4001    | 吉田  | 人事部
 C      | 4500    | 鈴木  | 開発部 |         | 鈴木  | 開発部
 D      | 5020    | 前田  | 経理部 | 5021    | 前田  | 経理部
 D      | 5020    | 伊藤  | 経理部 | 5021    | 伊藤  | 経理部
 E      | 3000    | 本田  | 人事部 | 3001    | 本田  | 人事部
 E      | 3000    | 三好  | 人事部 | 3001    | 三好  | 人事部
実現したい結果は
 id     | button1 | name1 | dept1  | button2 | name2 |
dept2
--------+---------+-------+--------+---------+-------+--------
 A      | 5000    | 田中  | 総務部 |         |     | 
 B      | 4000    | 佐藤  | 人事部 | 4001    | 吉田  | 人事部
 C      | 4500    | 鈴木  | 開発部 |         |    | 
 D      | 5020    | 前田  | 経理部 | 5021    | 伊藤  | 経理部
 E      | 3000    | 本田  | 人事部 | 3001    | 三好  | 人事部
なのですが、実現するためのSQL文をご存知の方、
いらっしゃいましたらば、ご教授頂けませんでしょうか。
よろしくお願い致します。
    
    
pgsql-jp メーリングリストの案内