当前位置: 首页 > 面试题库 >

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

吕胤
2023-03-14
问题内容

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

因此,我希望查询返回所有鸟类,以及人们喜欢该鸟类的记录的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

不同的联接

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;


 类似资料:
  • 问题内容: 如何使用JOIN从一个表中选择所有列,从另一个表中仅选择一些列?在MySQL中。 问题答案: 只需使用表名: 这将选择所有列和列和从。

  • 问题内容: Hibernate可以做到这一点吗? 该查询在SQL中工作正常,但在Hibernate中给出以下异常: 问题答案: 您不需要“ ”。hibernate正在旋转对象,对于指向SQL中的列没有意义。当您需要E时,它将变成E对象。 从E中选择E 这是HQL 当您调用session.createQuery()时,甚至“ FROM E”也可以使用。

  • 问题内容: 我有两个表: 我想从表1中选择所有具有值A和B的表2行的行。这将是行1和3(不是2行,因为它只有A,没有4行是因为只有B)。我可以在没有子查询的情况下执行此操作吗? (注意:我还需要查询表1中的值,因此我不能只查询表2。) 问题答案: 塔达阿!没有子查询。

  • 问题内容: 我有下表: 我希望结果是这样的: 其中结果仅显示每个“名称”的“记录”的最小值,并按所选日期进行过滤。我正在使用SQL。 问题答案: 使用: 或者 要过滤查询,请添加子句,例如:

  • 我正在从远程数据库读取一组行,从本地数据库读取一组类似的行,然后使用RemoveAll删除本地已经存在的远程行。。。 但这对我来说似乎不对。当我真正需要做的只是检查是否存在匹配项时,我认为我不应该计算事物。我尝试了和的各种用法,但得到了废话。我不能使用(如这里建议的),因为列表元素不是同一类型。 有更好的方法吗?

  • 问题内容: table1 (id, name) table2 (id, name) 询问: 问题答案: SELECT t1.name FROM table1 t1 LEFT JOIN table2 t2 ON t2.name = t1.name WHERE t2.name IS NULL 问 :这是怎么回事? 答 :从概念上讲,我们从中选择所有行,并为每一行尝试在其中找到具有相同值的行。如果没有这