当其中一个为NULL / Blank时,SQL加入2列

时间:2016-03-25 17:57:40

标签: sql sql-server

假设我有2个这样的表格: enter image description here

我想加入#tmp1&列的#tmp2:Col2& Col3。但是,如果这些列中的任何一个的值为空或Null,我想忽略该列,只看一个。 所以例如在这里,当我加入Col2是ABC的时候,我应该同时得到DEF& Col3的空白。

我希望我在这里有所作为。如果不够清楚,请道歉。

2 个答案:

答案 0 :(得分:0)

我无法从您的示例中告诉您要加入哪些列,但要解决" null"你这样做的问题

SELECT *
FROM T1
JOIN T2 ON COALESCE(T1.COL1,T2.COL1) = T2.COL1
         AND COALESCE(T1.COL2,T2.COL2) = T2.COL2

如果T1.COL1或T1.COL2为空,它将使用它所加入的表的值。这允许null为"通配符"。

或者如果T2是具有空值的表

SELECT *
FROM T1
JOIN T2 ON T1.COL1 = COALESCE(T2.COL1,T1.COL1)
         AND T1.COL2 = COALESCE(T2.COL2,T1.COL2) 

答案 1 :(得分:0)

如果使用union的2列中至少有1列相同,则可以使用exists进行此检查:

select col1, col2, col3
from tmp1 t1
where exists (select 1
              from tmp2 t2
              where t1.col2 = t2.col2 or t1.col3 = t2.col3)
union 
select col1, col2, col3
from tmp2 t2
where exists (select 1
              from tmp1 t1
              where t1.col2 = t2.col2 or t1.col3 = t2.col3)

结果:

|  col1 | col2 | col3 |
|-------|------|------|
| test1 |  abc |  def |
| test2 |  aaa |  bbb |
| test1 |  abc |      |
| test2 |  ccc |  bbb |