我有三张桌子。技能(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行以及用户具有该技能的用户信息。如果没有,此信息将为空,但所有技能信息都将在那里。
我如何进行此类查询?
答案 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;