人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

以下のときの、SQLの書き方がわからないので教えてください

3つのテーブルがあります

・社員テーブル (T_USER)
1,鈴木
2,佐藤
3,斉藤
4,佐々木
5,山本


・スキルテーブル (T_SKILL)
1,英語
2,中国語
3,韓国語
4,プログラミング
5,設計
6,インフラ
7,ネットワーク
8,マーケティング
9,SEO


・社員スキルテーブル (T_USER_SKILL)
社員スキルID, 社員ID, スキルID
1,1,1
2,1,2
3,1,4
4,2,1
5,2,6
6,3,4
6,3,5
6,3,6





このようなとき、英語もしくは中国語ができる人を探すのは以下のようなSQLで出来ることがわかりました
select B.name from (select user_id from T_USER_SKILL where skill_id in (1,2)) A left join T_USER B on A.user_id = B.user_id;

英語と中国語、両方出来る人を探すにはどのように書いたら良いのでしょうか。

よろしくお願いします。

●質問者: spacewarp
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● きゃづみぃ
●100ポイント

select B.name from (
select distinct A1.user_id1 user_id from
(select A1.user_id user_id1,A1.skill_id from T_USER_SKILL A1 Where A1.skill_id = 1) A1 inner join
(select A2.user_id user_id4,A2.skill_id from T_USER_SKILL A2 Where A2.skill_id = 2) A4
on A1.user_id1 = A4.user_id4
) A left join T_USER B on A.user_id = B.user_id

こんな感じでいいでしょう。


spacewarpさんのコメント
参考になりました。ありがとうございました。

2 ● うぃんど
●100ポイント

例を2つほど

該当するスキルを単純に数える方法

SELECT B.name
FROM (
 SELECT user_id
 FROM T_USER_SKILL
 WHERE skill_id in (1, 2)
 GROUP BY user_id
 HAVING count(*) = 2
) A
LEFT JOIN T_USER B ON A.user_id = B.user_id
;

該当するスキルをAND条件で繋ぐ方法

SELECT B.name
FROM (
 SELECT A1.user_id
 FROM T_USER_SKILL A1
 LEFT JOIN T_USER_SKILL A2 ON A2.user_id = A1.user_id
 WHERE A1.skill_id = 1 AND A2.skill_id = 2
) A
LEFT JOIN T_USER B ON A.user_id = B.user_id
;

spacewarpさんのコメント
参考になりました。ありがとうございました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ