2011年9月20日

[mysql 15631] Re: LEFT JOIN で結合先がない場合

初めまして。早瀬と申します。

> と書いたのですが、これでは結合先がないものは空値またはNULLで返ってこ
ず、期待した結果になりませんでした(情報Aと情報Bの2行しか返ってこなかっ
た)。

where句でshouhin_id = 1で絞り込んでいますので、
2行しか返ってこないのは正しいですね。

こうすると全て出るかと思います。

SELECT tabJ.jouhou
FROM tabK LEFT JOIN tabJ ON tabK.id = tabJ.kuni_id and shouhin_id = 1
ORDER BY tabK.id

パッと思いつきで記述したので、何か見落としがあったらご容赦を。
以上です。

(2011/09/20 9:58), 久光 一誠 wrote:
> 久光と申します
>
> 下記のような3つのテーブルがあり、
>
> 商品テーブル(tabS)
> [id] [name]
> 1 テレビ
> 2 洗濯機
>
> 国テーブル(tabK)
> [id] [name]
> 1 日本
> 2 米国
> 3 中国
>
> 国別情報テーブル(tabJ)
> [shouhin_id] [kuni_id] [jouhou]
> 1 1 情報A
> 1 3 情報B
> 2 2 情報C
>
> このテーブル構成から例えばテレビに関する国別情報を国テーブルのid順に
>  情報A
>  (空値またはNULL)
>  情報B
> という形で取り出そうと思い
>
> SELECT tabJ.jouhou
> FROM tabK LEFT JOIN tabJ ON tabK.id = tabJ.kuni_id
> WHERE shouhin_id = 1
> ORDER BY tabK.id
>
> と書いたのですが、これでは結合先がないものは空値またはNULLで返ってこず、期待した結果になりませんでした(情報Aと情報Bの2行しか返ってこなかった)。
> 上記のテーブル構成で、国テーブルのid順に沿って国別情報テーブルから(情報がない場合は空値またはNULLが返ってくるように)取り出すにはどんなSQL文を書いたらいいでしょうか?
>
> なお国別情報テーブルは商品IDと国IDのセットが重複しない仕組みにしてあるので、一つの商品に同じ国の情報が複数現れることはない前提で考えています。
>
> よろしくお願いいたします。
>
>
>
>


投稿者 xml-rpc : 2011年9月20日 12:51
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/106434
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。