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

締切り済みの質問

sql server 2008でjoinの使い方

sql server 2008にて、joinの使い方について教えて下さい。
以下二つのテーブルがあります。

所属テーブル
名前 性別 所属
田中 男 経理部
田中 女 総務部
鈴木 女 経理部
佐藤 男 総務部

住所テーブル
名前 性別 住所
田中 男 杉並区
佐藤 男 中野区
鈴木 女 中央区

この二つのテーブルよりデータを取得し、以下のテーブルを作りたいです。

住所と所属テーブル
名前 性別 住所 所属
田中 男 杉並区 経理部
田中 女 null 総務部
鈴木 女 中央区 経理部
佐藤 男 中野区 総務部

但し、left join を使って、
所属テーブル.名前 = 住所テーブル.名前 and 所属テー ブル.性別 = 住所テーブル.性別
の条件を使用すると、女性の田中さんのデータが抽出されません(住所テーブルに登録されていないため、マッチングできていません)。どうすれば以上のテーブルが作られますか?

投稿日時 - 2011-10-02 23:47:25

QNo.7048405

すぐに回答ほしいです

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

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

回答(3)

ANo.3

[所属テーブル]、[住所テーブル]の構成が良くないですがSQLを作るとしたら以下の通りです。

SELECT
T0.[名前],
T0.[性別],
T1.[住所],
T0.[所属]
FROM [所属テーブル] AS T0
LEFT JOIN [住所テーブル] AS T1
ON T0.[名前] = T1.[名前]
AND (T0.[性別] = T1.[性別] OR T0.[性別] IS NULL)

投稿日時 - 2011-10-06 17:37:22

ANo.2

「所属テーブル」が主なら、「所属テーブル」が駆動表になるように書いてあげれば良いのでは?

質問に書いてある内容のみであれば以下で仕様を満たします。

select
a.名前,
a.性別,
b.住所,
a.所属,
from 所属テーブル AS a
left outer join 住所テーブル as b
on a.性別 = b.性別
and a.名前 = b.名前;

※同姓同名、同性、同部署を考慮すると社員Noなどをキーにしたほうがよいと思います。

投稿日時 - 2011-10-03 15:05:51

ANo.1

Left Join の他にも Right Join, Inner Join, Full Join, Cross Join があります。

詳しくはこちらをどうぞ。

http://uchukamen.com/SQL2005/Select/Select.htm

投稿日時 - 2011-10-03 00:10:42

あなたにオススメの質問