こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

結合について質問です

SQLite3データベースを使っています。

2つのテーブルt1とt2があり、t2はt1の重複する部分を担っています。
t2はt1に対し、NULLでもよい項目です。

t1には主キーのidと名前、
t2には主キーのidと、t1と結びつけるt1.id(外部キーにはしていません)と、
行ったことのある国の3つがあります。

山田花子さんはアメリカとイギリスに行ったことがあり、
山田太郎君はどこへも行ったことがないとします。

この時、行ったことのある国を1つ選ぶ処理をしたいのですが、
t1とt2を結合して、t1.idに対しグループ化(group by)を行った場合、
山田花子さんはアメリカへ行ったことがあります。
となります。

t2に山田太郎君の項目がない為、結合しても山田太郎君は取得できません。
もしt2に項目がなかった場合でも、
NULLとして取得したいのですがどうすればよいでしょうか?

こういう表が欲しいです
t1.id t1.名前   t2.国
1   山田花子 アメリカ
2   山田太郎

create table t1 (t1.id integer not null primary key, 名前 text not null)
create table t2 (t2.id integer not null primary key, t1.id integer not null, 国 text not null)

よろしくお願いします。

投稿日時 - 2011-07-21 08:32:30

QNo.6889373

困ってます

質問者が選んだベストアンサー

外部結合すればいいのではないでしょうか。

select t1.id,t1.名前,min(t2.国) as 国
from t1
left join t2 on (t2.t1id = t1.id)
group by t1.id,t1.名前;

山田花子さんのアメリカ、イギリスのうち
どちらを取得するのかの条件が不明なのでmin関数で取得しています。
そこらへんは適当に修正してください。
一応動作確認はしました。
http://ideone.com/RY2Ku

投稿日時 - 2011-07-21 10:02:36

お礼

早速教えていただいたSQLで試してみたところ、
思ったとおりの結果になりました。
結合でちゃんとできたんですね。
精進したいと思います。
本当に助かりました。どうもありがとうございました。

投稿日時 - 2011-07-21 17:04:13

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問