我要求从桌面鸟类(基本上所有的鸟类)中选择所有值,然后加入另一个跟踪谁喜欢那只鸟的桌子.
所以我希望查询返回所有鸟类,以及人们喜欢那只鸟的记录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)
| 归档时间: |
|
| 查看次数: |
30090 次 |
| 最近记录: |