首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择一个表中的所有项并与另一个表连接,允许空值

选择一个表中的所有项并与另一个表连接,允许空值
EN

Stack Overflow用户
提问于 2011-03-11 04:11:46
回答 4查看 33.8K关注 0票数 6

我需要从表birds (基本上是所有的鸟)中选择所有值,然后加入另一个跟踪喜欢那只鸟的表。

所以我希望查询返回所有的鸟,以及人们喜欢那只鸟的记录的ids。如果没有任何人喜欢这只鸟的记录,那么该字段应该为空。

我当前的查询不是获取空值。这就是它:

代码语言:javascript
复制
select  bird_name, member_id 
from birds  
right join bird_likes on birds.bird_id = bird_likes.bird_id 
where member_id = 2 ;

我可以做些什么来确保birds表中的每一行都显示一次?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-11 04:16:37

您必须使用left join而不是right join

不同的连接

inner join:只保留两个表中都有数据的行

left join:保留左侧表中的所有行,并从右侧添加可能的行

right join:保留右侧表中的所有行,并从左侧添加可能的行

左边的表始终是我们已经拥有的表,而右边的表是我们要连接的表。

对于记录,还有一个cross join,它将左表中的每一行与右表中的每一行连接在一起,但这个并不经常使用。

我希望现在对您来说这一切都更清楚了:)

更正的查询

代码语言:javascript
复制
select  bird_name, member_id 
from birds  
left join bird_likes on birds.bird_id = bird_likes.bird_id 
where member_id = 2;

请注意,这里假设列member_id在bird表中,否则您可以保留如下条件:

代码语言:javascript
复制
select  bird_name, member_id 
from birds  
left join bird_likes on 
    birds.bird_id = bird_likes.bird_id and
    bird_likes.member_id = 2;
票数 30
EN

Stack Overflow用户

发布于 2011-03-11 04:15:18

代码语言:javascript
复制
SELECT bird_name, member_id
FROM birds
LEFT JOIN bird_likes ON birds.bird_id=bird_likes.bird_id AND member_id=2
票数 3
EN

Stack Overflow用户

发布于 2011-03-11 04:18:37

在这种情况下,您希望使用left outer join

代码语言:javascript
复制
select  bird_name, member_id 
from birds  
left outer join bird_likes on birds.bird_id = bird_likes.bird_id 
where member_id = 2;

这将返回所有的鸟名称,对于那些没有喜欢的鸟,返回'null‘。

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

https://stackoverflow.com/questions/5265350

复制
相关文章

相似问题

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