首页 > 解决方案 > LEFT JOIN 从左表中获取所有行,而不考虑连接条件

问题描述

我正在尝试进行左连接,以便我从左表中获取所有行,即使这些行的连接条件不正确。

示例:下面的 Aid = Bid 但表 B 只有 3 个 id

在此处输入图像描述

我正在使用的查询仅给出连接条件为真的行。即使联接条件不成立,有没有办法从左表中获取所有行?

我的查询:

SELECT Table1.Aid,
       Table2.Bid,
       Table2.Issueid
  FROM Table1
       LEFT JOIN Table2 ON Table1.Aid = Table2.Bid;

 WHERE Table2.Issueid IN (
    'a',
    'b'
)

标签: sqloraclejoinoracle-sqldeveloper

解决方案


将您的移动WHERE到您的ON(加入谓词):

SELECT Table1.Aid, Table2.Bid, Table2.IssueId
FROM Table1 LEFT JOIN Table2
ON Table1.Aid = Table2.Bid
   AND Table2.IssueId IN ('a','b');

WHERE在右侧表格上过滤的A基本上使您LEFT JOIN成为INNER JOIN. 它过滤掉NULL行。

请记住,这现在将返回NULLTable2.Bid = 3行,因为它不满足Table2.IssueId IN ('a','b')条件。


推荐阅读