外部联接基于3个表

时间:2011-04-13 06:50:50

标签: mysql sql

我有三张桌子。技能(id),用户(id)和user_skills(user_id,skill_id)。

现在,我尝试左外连接,如:

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 个答案:

答案 0 :(得分:3)

在连接中放入user_id检查应该可以解决问题:

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

答案 1 :(得分: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中进行的。这可以保证您获得特定用户的技能以及他尚未掌握的技能。

答案 2 :(得分:0)

为什么你不能写这样的查询select * from skills left outer join user_skills ON skills.id = user_skills.skill_id where user_skills.user_id = skills.id;