当条件不满足时从左表中检索数据

时间:2016-10-21 16:47:09

标签: sql-server tsql sql-server-2014

我有一个场景,我必须连接两个表,并希望在条件不符合时从左表中检索数据。

实施例: 表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,以便在我的项目中进一步计算。 我们可以这样做吗? 任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:2)

您可以使用ISNULL

  

用指定的替换值替换NULL。

and ISNULL(t2.code,-1)=ISNULL(t1.code,-1)

COALESCE

  

按顺序计算参数,并返回最初未计算为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))