首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于3个表的外部连接

基于3个表的外部连接
EN

Stack Overflow用户
提问于 2011-04-13 14:50:50
回答 3查看 134关注 0票数 0

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

现在,我尝试一个左外部连接,如下所示:

代码语言:javascript
复制
select * from skills left outer join user_skills ON skills.id = user_skills.skill_id;

但它不会带回我需要的东西,因为没有检查用户id。如果我执行以下操作:

代码语言:javascript
复制
select * from skills left outer join user_skills ON skills.id = user_skills.skill_id where user_skills.user_id = 986759322;

我根据特定的用户id返回一条记录。

然而,我想要找回某个用户的所有技能,无论该用户是否发现了该技能。因此,如果技能是4,我希望返回4行,其中包括技能信息以及用户信息,如果用户具有该技能。如果不是,此信息将为空,但所有技能信息都将在那里。

我怎么才能做出这样的查询呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-13 14:57:33

代码语言:javascript
复制
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中进行的。这保证了你获得了特定用户的技能,加上他还没有的技能。

票数 3
EN

Stack Overflow用户

发布于 2011-04-13 14:54:53

将user_id检查放入连接中应该可以做到这一点:

代码语言:javascript
复制
select * from skills 
left outer join user_skills 
  on skills.id = user_skills.skill_id
 and user_skills.user_id = 123   
票数 3
EN

Stack Overflow用户

发布于 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;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5645452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档