- 締切済み
sql server 2008でjoinの使い方
sql server 2008にて、joinの使い方について教えて下さい。 以下二つのテーブルがあります。 所属テーブル 名前 性別 所属 田中 男 経理部 田中 女 総務部 鈴木 女 経理部 佐藤 男 総務部 住所テーブル 名前 性別 住所 田中 男 杉並区 佐藤 男 中野区 鈴木 女 中央区 この二つのテーブルよりデータを取得し、以下のテーブルを作りたいです。 住所と所属テーブル 名前 性別 住所 所属 田中 男 杉並区 経理部 田中 女 null 総務部 鈴木 女 中央区 経理部 佐藤 男 中野区 総務部 但し、left join を使って、 所属テーブル.名前 = 住所テーブル.名前 and 所属テー ブル.性別 = 住所テーブル.性別 の条件を使用すると、女性の田中さんのデータが抽出されません(住所テーブルに登録されていないため、マッチングできていません)。どうすれば以上のテーブルが作られますか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- lot2000
- ベストアンサー率50% (2/4)
[所属テーブル]、[住所テーブル]の構成が良くないですがSQLを作るとしたら以下の通りです。 SELECT T0.[名前], T0.[性別], T1.[住所], T0.[所属] FROM [所属テーブル] AS T0 LEFT JOIN [住所テーブル] AS T1 ON T0.[名前] = T1.[名前] AND (T0.[性別] = T1.[性別] OR T0.[性別] IS NULL)
- 3rd_001
- ベストアンサー率66% (115/174)
「所属テーブル」が主なら、「所属テーブル」が駆動表になるように書いてあげれば良いのでは? 質問に書いてある内容のみであれば以下で仕様を満たします。 select a.名前, a.性別, b.住所, a.所属, from 所属テーブル AS a left outer join 住所テーブル as b on a.性別 = b.性別 and a.名前 = b.名前; ※同姓同名、同性、同部署を考慮すると社員Noなどをキーにしたほうがよいと思います。
- yorozu_ya
- ベストアンサー率54% (76/140)
Left Join の他にも Right Join, Inner Join, Full Join, Cross Join があります。 詳しくはこちらをどうぞ。 http://uchukamen.com/SQL2005/Select/Select.htm