基于3个表的外部联接

问题描述

| 我有三张桌子。技能(id),用户(id)和用户技能(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行,其中包括用户拥有该技能的技能信息以及用户信息。如果不是,该信息将为空,但是所有技能信息将在那里。 我该如何查询?     

解决方法

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
子句中进行的。这样可以确保您获得该特定用户的技能以及他尚未拥有的技能。     ,将user_id检查加入联接应该可以解决问题:
select * from skills 
left outer join user_skills 
  on skills.id = user_skills.skill_id
 and user_skills.user_id = 123   
    ,你为什么不能写这样的查询
select * from skills left outer join user_skills ON skills.id = user_skills.skill_id where user_skills.user_id = skills.id;
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...