我正在尝试进行左连接,以便即使这些行的连接条件不成立,也可以从左表中获取所有行。
示例:“援助下方” =“出价”,但表B仅包含3个身份
我正在使用的查询仅给出联接条件为true的行。即使Join条件不成立,有没有办法从左表获取所有行?
我的查询
SELECT Table1.Aid,
Table2.Bid,
Table2.Issueid
FROM Table1
LEFT JOIN Table2 ON Table1.Aid = Table2.Bid;
WHERE Table2.Issueid IN (
'a',
'b'
)
答案 0 :(得分:3)
将您的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
实际上使您的LEFT JOIN
变成了INNER JOIN
。它将滤除NULL
行。
请记住,这将返回NULL
行的Table2.Bid = 3
,因为它不满足Table2.IssueId IN ('a','b')
的条件。
答案 1 :(得分:0)
我很惊讶您的查询运行。您应该有一个ON
子句:
SELECT Table1.Aid, Table2.Bid, Table2.IssueId
FROM Table1 LEFT JOIN
Table2
ON Table1.Aid = Table2.Bid;
对于修改后的查询,您仍然需要将条件移至ON
子句中:
SELECT Table1.Aid, Table2.Bid, Table2.IssueId
FROM Table1 LEFT JOIN
Table2
ON Table1.Aid = Table2.Bid AND Table2.IssueId IN ('a','b');
答案 2 :(得分:0)
我认为在这种情况下,您需要一个left outer join
子句的WHERE
。
例如:
SELECT Table1.Aid, Table2.Bid, Table2.IssueId
FROM Table1
LEFT OUTER JOIN Table2 ON Table1.Aid = Table2.Bid
AND Table2.IssueId IN ('a','b')
答案 3 :(得分:0)
根据您想要的结果
ON Table1.Aid = Table2.Bid
AND Table2.IssueId IN ('a','b')
不会给您想要的结果。具体来说,第3行将是
3, null, null
不是
3, 3, null
如果这是您真正想要的,那么简单地通过完全没有任何where子句的左联接即可得到。