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

Gen*_*nik 4 mysql sql

我要求从桌面鸟类(基本上所有的鸟类)中选择所有值,然后加入另一个跟踪谁喜欢那只鸟的桌子.

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

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

select  bird_name, member_id 
from birds  
right join bird_likes on birds.bird_id = bird_likes.bird_id 
where member_id = 2 ;
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能确保bird表中的每一行都显示一次?

谢谢,亚历克斯

krt*_*tek 28

你必须使用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;
Run Code Online (Sandbox Code Playgroud)

请注意,这假定列member_id在鸟表中,否则您可以保持这样的条件:

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;
Run Code Online (Sandbox Code Playgroud)

  • @Genadinik where子句从所有表中过滤数据,如果member_id在bird_likes表中,请检查我的第二个解决方案,在这种情况下你必须将条件移动到连接! (2认同)