2009-12-09 71 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