我有两个表,TableA
和TableB
,其中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
:
dt | id | 类型 |
---|---|---|
'2022-02-03' | 1 | 2|
'2022-02-03' | 2 | 3 |
'2022-02-03' | 3 | 1 |
'2022-02-03' | 1 | 1 |
根据注释,问题是我在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'
我得到了我想要的结果。