将TableA的一个子集与TableB左连接,但保留TableA中的所有行



我有两个表,TableATableB,其中TableB有关于TableA中行的额外数据,但仅当TableA.type IN (2, 3)时。如果我做一些类似的事情

SELECT
a.id,
a.type,
b.*
FROM TableA a
LEFT JOIN TableB b
ON a.id = b.id
AND a.type IN (2, 3)
WHERE a.dt = '2022-02-03'
AND b.dt = '2022-02-03'

它将仅返回CCD_ 6为2或3的行。但是,我希望返回所有的行TableA,即使类型不是2或3。当type不匹配时,我希望b.*中的列为NULL

我想到的一个想法是用一个单独的查询来联合这个查询,该查询为TableB的所有列手动选择null,并检查type是否不是2或3,但这似乎很乏味。有没有更干净的方法来实现这一点?

例如,TableA:

2
dtid类型
'2022-02-03'1
'2022-02-03'23
'2022-02-03'31
'2022-02-03'11

根据注释,问题是我在WHERE子句中而不是在联接条件中放入了一些条件。如果我将查询修改为类似的内容

SELECT
b.*,
a.dt,
a.id,
a.type
FROM TableA a
LEFT JOIN TableB b
ON a.id = b.id
AND a.type IN (2, 3)
AND a.dt = '2022-02-03'
AND b.dt = '2022-02-03'

我得到了我想要的结果。

相关内容

  • 没有找到相关文章

最新更新