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;
英語と中国語、両方出来る人を探すにはどのように書いたら良いのでしょうか。
よろしくお願いします。
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
こんな感じでいいでしょう。
例を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 ;
参考になりました。ありがとうございました。
参考になりました。ありがとうございました。
2013/03/27 17:19:24