2011-04-13 96 views
0

我有三個表。技能(id),用戶(id)和user_skills(user_id,skill_id)。根據3個表的外部聯接

現在,我嘗試了左外連接,如:

select * from skills left outer join user_skills ON skills.id = user_skills.skill_id; 

但它不會帶回我需要什麼,因爲沒有檢查用戶的ID。 如果我做了:

select * from skills left outer join user_skills ON skills.id = user_skills.skill_id where user_skills.user_id = 986759322; 

我找回一個記錄,基於特定的用戶ID。

但是,我想要找回某個用戶的所有技能,無論用戶是否擁有該技能。所以,如果技能是4,我想要回4行,其中包括技能信息以及用戶信息,如果用戶具有該技能。否則,此信息將爲空,但所有技能信息將在那裏。

我該如何做這樣的查詢?

回答

3
SELECT skills.id, IF(IS NULL user_skills.skill_id, 'Yes', 'No') 
FROM skills 
LEFT JOIN user_skills ON (
    skills.id = user_skills.skill_id AND 
    user_skills.user_id = 1234 
) 

注意,通過用戶ID過濾在由查詢ON條款,而不是WHERE。這可以確保您獲得該特定用戶的技能以及他還沒有的技能。

+0

thanx!這將做到這一點。 BlorgBeard,thanx也是如此。都upvoted,不得不選擇一個:) – Spyros 2011-04-13 07:06:48

3

把USER_ID檢查的加入應該做的伎倆:

select * from skills 
left outer join user_skills 
    on skills.id = user_skills.skill_id 
and user_skills.user_id = 123 
0

你爲什麼不能這樣寫select * from skills left outer join user_skills ON skills.id = user_skills.skill_id where user_skills.user_id = skills.id;

+0

因爲這種方式不起作用:爲什麼user_skills.user_id = skills.id? :) – Marco 2011-04-13 06:57:08

+0

對不起,它可以這樣寫。 skills.id = Users.id – 2011-04-13 06:59:16

+0

我以爲是錯的,對不起:) – Marco 2011-04-13 07:00:59