我需要从表中的鸟(基本上是所有鸟)中选择所有值,然后与另一个跟踪谁喜欢那只鸟的表联接。
因此,我希望查询返回所有鸟类,以及人们喜欢该鸟类的记录的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表中的每一行都显示一次?
您必须使用left join而不是right join
left join
right join
inner join :仅保留两个表中都有数据的行
inner join
left join :保留左侧表格的所有行,并添加右侧表格中的所有内容
right join :保留右侧表的所有行,并从左侧添加所有可能的行
左表始终是我们已经拥有的表,右表是我们正在连接的表。
为了便于记录,还有一个cross 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表中,否则您可以保留以下条件:
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;