我有一个场景,我必须连接两个表,并希望在条件不符合时从左表中检索数据。
实施例: 表1:
ID code itemsequence
0001 1 1
0001 1 2
0001 2 1
0001 2 2
0001 3 1
0002 null 1
表2:
ID code outcomeID sequence itemsequence
0001 1 0001 1 1
0001 1 0004 4 2
0001 2 0002 2 1
0001 2 0005 5 2
0001 3 0003 3 1
0002 null 0001 1 1
当我在下面选择时,我得到6行但是有t2.sequence,对于ID == 002.这是NULL。这是正确的
select * from table1 t1
LEFT join table2 t2
on t2.Id=t1.ID and t1.itemsequence=t2.itemsequence and t2.code=t1.code
但我希望尽管条件失败但仍有序列值。我希望这个序列值用于各个ID,以便在我的项目中进一步计算。 我们可以这样做吗? 任何帮助表示赞赏!
答案 0 :(得分:2)
您可以使用ISNULL
用指定的替换值替换NULL。
and ISNULL(t2.code,-1)=ISNULL(t1.code,-1)
按顺序计算参数,并返回最初未计算为NULL的第一个表达式的当前值。
and COALESCE(t2.code,-1)=COALESCE(t1.code,-1)
解决这个问题。
注意:两个语句都会将NULL
更改为-1
,以便您可以正确加入。如果您在ID
中列出的NULL
列与code
相同,则会对此行产生CROSS JOIN效果。
答案 1 :(得分:1)
或者您可以为NULL值t2.code IS NULL AND t1.code IS NULL
AND t1.itemsequence=t2.itemsequence AND
( t2.code = t1.code OR (t2.code IS NULL AND t1.code IS NULL))