一尘不染

选择一个表中的所有项目并与另一表联接,允许为空

mysql

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

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

我当前的查询没有得到空值。这里是:

select  bird_name, member_id 
from birds  
right join bird_likes on birds.bird_id = bird_likes.bird_id 
where member_id = 2 ;

如何确保Birds表中的每一行都显示一次?


阅读 238

收藏
2020-05-17

共1个答案

一尘不染

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

不同的联接

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

left join :保留左侧表格的所有行,并添加右侧表格中的所有内容

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

左表始终是我们已经拥有的表,右表是我们正在连接的表。

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

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

更正的查询

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表中,否则您可以保留以下条件:

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;
2020-05-17