我有一个Skills表,里面有14条记录。它的结构如下:
| id | name |
然后我有一个User_Skills表,我想加入技能表。
这是结构:
| User_id | Skill_id |
基本上我希望能够进行一个总是产生14条记录的连接,并在用户未与之关联的任何字段中显示NULL。
我几乎得到了我想要的查询结果 代码:
SELECT * FROM Skills LEFT JOIN User_Skills ON Skills.id = User_Skills.Skill_id
编辑:更清楚 - 这是此查询的结果集。我需要通过User_id选择技能,但仍然显示所有14种技能,即使结果在User_id字段中为Null。
id name User_id Skill_id
1 HGV1 1000 1
1 HGV1 1001 1
2 HGV2 1001 2
3 No.1 Mechanic 1000 3
3 No.1 Mechanic 1001 3
4 No.2 Mechanic 1001 4
5 Designer 1001 5
5 Designer 1000 5
6 Engineer 1000 6
7 Data Analysis 1001 7
7 Data Analysis 1000 7
8 Coaching/Inst. 1001 8
8 Coaching/Inst. 1000 8
9 Hospitality 1000 9
10 Promo Girl 1000 10
11 Public Relations NULL NULL
12 Photographer NULL NULL
13 Film Crew 1001 13
14 Physiotherapist NULL NULL
但它显示我在user_skills表中的记录数量...即,重复的技能名称,因为多个用户与该技能相关联。
这也几乎得到了: 代码:
SELECT * FROM Skills LEFT JOIN User_Skills ON Skills.id = User_Skills.Skill_id WHERE User_id = 1001
但这只显示了用户所关联的技能,并且没有显示我想要的任何NULL条目。
有谁知道如何实现此查询?
答案 0 :(得分:1)
SELECT * FROM
Skills LEFT OUTER JOIN
(select distinct user_id, skill_id from User_Skills where user_id = 1001) xxx
ON Skills.id = xxx.Skill_id
这会产生你需要的东西吗?