質問: 結合について質問です 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) よろしくお願いします。
回答: 外部結合すればいいのではないでしょうか。 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