我有三张桌子。技能(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行,其中包括技能信息以及用户信息,如果用户具有该技能。如果不是,此信息将为空,但所有技能信息都将在那里。
我怎么才能做出这样的查询呢?
发布于 2011-04-13 14:57:33
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中进行的。这保证了你获得了特定用户的技能,加上他还没有的技能。
发布于 2011-04-13 14:54:53
将user_id检查放入连接中应该可以做到这一点:
select * from skills
left outer join user_skills
on skills.id = user_skills.skill_id
and user_skills.user_id = 123 发布于 2011-04-13 14:56:01
为什么不能像这样编写查询select * from skills left outer join user_skills ON skills.id = user_skills.skill_id where user_skills.user_id = skills.id;
https://stackoverflow.com/questions/5645452
复制相似问题