当我进行左连接时,我仍然无法从左表中获取数据?
Posted
技术标签:
【中文标题】当我进行左连接时,我仍然无法从左表中获取数据?【英文标题】:When I do left join, I am still not able to get data from left table? 【发布时间】:2021-12-28 06:08:46 【问题描述】:条件是我知道右表没有与左表匹配的所有记录。
但我仍然无法从左表获取数据,右表为空
select a.sales, b.profit
from T1 a
left join T2 b on a.id = b.id
where b.category = 'office'
and b.code = '245'
由于右表的where条件,右表没有匹配的记录, 没有where条件我得到了记录。
我的问题是,尽管使用左连接保留左表记录,但左表会受到右表 where 条件的影响。
【问题讨论】:
如果T2
中没有匹配项,则b.code = '245'
不可能为真,因为b.code IS NULL
。将WHERE
条件移动到连接条件
是的,它会受到影响。右表上的 WHERE 将 LEFT JOIN 转换为 INNER。我想您可以尝试将查询重写为 SELECT A.SALES, B.PROFIT FROM T1 A LEFT JOIN (SELECT X.ID,X.PROFIT FROM T2 X WHERE X.CATEGORY='OFFICE' AND X.CODE='245 ')B ON A.ID=B.ID
这能回答你的问题吗? Left Outer Join doesn't return all rows from my left table?
【参考方案1】:
您的WHERE
子句强制查询仅返回b.category
和b.code
匹配所需值的行,非NULL
匹配;这有效地将您的JOIN
条件转换为INNER JOIN
。
您想将过滤器放在连接条件中:
select a.sales,
b.profit
from T1 a
left join T2 b
on ( a.id = b.id
AND b.category = 'office'
AND b.code = '245')
或者在子查询中预过滤T2
:
select a.sales,
b.profit
from T1 a
left join (
SELECT *
FROM T2
WHERE category = 'office'
AND code = '245'
) b
on a.id = b.id
【讨论】:
以上是关于当我进行左连接时,我仍然无法从左表中获取数据?的主要内容,如果未能解决你的问题,请参考以下文章