我需要从表birds (基本上是所有的鸟)中选择所有值,然后加入另一个跟踪喜欢那只鸟的表。
所以我希望查询返回所有的鸟,以及人们喜欢那只鸟的记录的ids。如果没有任何人喜欢这只鸟的记录,那么该字段应该为空。
我当前的查询不是获取空值。这就是它:
select bird_name, member_id
from birds
right join bird_likes on birds.bird_id = bird_likes.bird_id
where member_id = 2 ;我可以做些什么来确保birds表中的每一行都显示一次?
发布于 2011-03-11 04:16:37
您必须使用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;发布于 2011-03-11 04:15:18
SELECT bird_name, member_id
FROM birds
LEFT JOIN bird_likes ON birds.bird_id=bird_likes.bird_id AND member_id=2发布于 2011-03-11 04:18:37
在这种情况下,您希望使用left outer join
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‘。
https://stackoverflow.com/questions/5265350
复制相似问题