2009-12-09 72 views
1

我有一张技能表,里面有14条记录。它的结构如下: | id | name |帮助MySQL加入

然后我有一个User_Skills表,我想加入到技能表中。 这里的结构是: | User_id | Skill_id |

基本上我希望能够做一个连接,它总是导致14个记录并显示在用户没有关联的任何字段NULL。

我差点想用此查询 码结果:

SELECT * FROM Skills LEFT JOIN User_Skills ON Skills.id = User_Skills.Skill_id 

编辑:为了更清楚 - 这是一组与该查询结果。我需要通过User_id选择技能,但即使User_id字段中的结果为空,仍然会显示全部14个技能。

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条目像我想要的。

有谁知道我可以如何实现这个查询?

回答

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 

这是否产生了您所需的?

+0

神奇 - 它就像一个魅力! 我太亲近了..我用WHERE而不是AND。我从来没有见过与LEFT和OUTER之前的连接。有趣的是,如果我从查询中删除OUTER,看起来我会得到相同的结果。 非常感谢你..让我回到生意! – Samuurai 2009-12-09 14:39:28