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