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