[pgsql-jp: 35775] INNER JOIN について
HIRANO Yoshitaka
y-hirano @ arp-nt.co.jp
2005年 8月 2日 (火) 15:35:45 JST
平野と申します。
PostgreSQL使用歴は半年、
PHP+PostgreSQLを使用したWebアプリケーションの開発を業務で行っています。
今回アドバイスを頂きたいのは、 INNER JOIN を使用したSQL文についてです。
使用しているサーバ、PostgreSQLのバージョンは以下の通りです。
PostgreSQL 7.3.4
FreeBSD 4.11
Apache/1.3.27
以下に状況を説明いたします。
データベースで「複数のスキルを持つ会員」の情報を管理するために、以下のような
仕組みを作りました。
管理には、以下の2つのテーブルを使用します。
・会員スキル( kaiin_skill )
・スキルマスタ( skill_master )
会員スキルテーブルに、 1 レコードに会員ID とスキルID の組を 1 つ収めます。
スキルマスタテーブルには、スキルIDとスキル名の組み合わせを収めます。
以下に例を示すと、
スキルテーブル
| kaiin_id | skill_id |
----------------
| 1 | 1 |
| 1 | 2 |
| 5 | 1 |
| 5 | 3 |
| 5 | 4 |
-------------------
スキルマスタテーブル
| skill_id | skill_name |
-------------------
| 1 | A |
| 2 | B |
| 3 | C |
| 4 | D |
| 5 | E |
-------------------
この状態で、会員ID = 5 の会員が持つスキル名の一覧を表示しようと思い、
下記のSQL文を実行しました。
-------------------------------------------
select
kaiin_skill.kaiin_id,
kaiin_skill.skill_id,
skill_master.skill_name
from kaiin_skill
inner join skill_master on
( kaiin_skill.skill_id=skill_master.skill_id )
where
kaiin_skill.kaiin_id=5;
-------------------------------------------
ここまで
取得したい結果は以下のような内容です。
| kaiin_id | skill_id | skill_name |
----------------------
| 5 | 1 | A |
| 5 | 3 | C |
| 5 | 4 | D |
--------------------------------------
しかし、実際には1件しか取り出すことができませんでした。
実行結果は以下の通りです。
| kaiin_id | skill_id | skill_name |
----------------------
| 5 | 1 | A |
------------------------
INNER JOIN を使わない下記のSQL文も試みたのですが、全く同じ結果が表示されまし
た。
--------------------------------------
select
kaiin_skill.kaiin_id,
kaiin_skill.skill_id,
skill_master.skill_name
from
skill_master,
kaiin_skill
where
kaiin_skill.skill_id=skill_master.skill_id
and
kaiin_skill.kaiin_id=5
;
--------------------------------------
ここまで
inner join using や left join,right join も試したのですが
アドバイスを頂ければ幸いです。
よろしくお願い致します。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
TEL.03-3666-0405 FAX.03-5652-3410
〒121-0813
東京都中央区日本橋小網町16-14 中食別館ビル4F
株式会社アープ 平野 良貴
www.arp-nt.co.jp www.art-tokyo.net
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
pgsql-jp メーリングリストの案内