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