[pgsql-jp: 35778] Re: INNER JOIN について

Takao Kato sirius @ jp.fujitsu.com
2005年 8月 2日 (火) 17:04:09 JST


加藤@川崎です。

簡単な話題のときだけシャシャリでてくる… ^^;

です。At Tue, 2 Aug 2005 15:35:45 +0900,
HIRANO Yoshitaka wrote:
> 管理には、以下の2つのテーブルを使用します。
> ・会員スキル( kaiin_skill )
> ・スキルマスタ( skill_master )

..snip..

> この状態で、会員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;

..snip..

以下で試しましたが、(予想通り)問題ありませんでした。
# primary/references切るのは避けました。_o_

test=> CREATE TEMP TABLE skill (k_id int,skill_id int);
test=> CREATE TEMP TABLE smaster (skill_id int,skill_name text);

test=> INSERT INTO skill VALUE (1,1)
test=> INSERT INTO skill VALUE (1,2)
test=> INSERT INTO skill VALUE (5,1)
test=> INSERT INTO skill VALUE (5,3)
test=> INSERT INTO skill VALUE (5,4)

test=> INSERT INTO smaster VALUE (1,'A');
test=> INSERT INTO smaster VALUE (2,'B');
test=> INSERT INTO smaster VALUE (3,'C');
test=> INSERT INTO smaster VALUE (4,'D');
test=> INSERT INTO smaster VALUE (5,'E');

test=> SELECT * FROM skill INNER JOIN smaster USING(skill_id) WHERE k_id = 5;
 skill_id | k_id | skill_name
----------+------+------------
        1 |    5 | A
        3 |    5 | C
        4 |    5 | D
(3 rows)


まぁinner joinを使わなくても、

SELECT skill.k_id,smaster.* FROM skill,smaster
WHERE skill.k_id = 5 AND skill.skill_id = smaster.skill_id;

でも同じ結果を得ることができます(した)。


実テーブル・データ的にみて、なにか考慮漏れがあるのではないでしょうか?

では
-------------------------------------------------------------
加藤@川崎在勤



pgsql-jp メーリングリストの案内