我想加入#tmp1&列的#tmp2:Col2& Col3。但是,如果这些列中的任何一个的值为空或Null,我想忽略该列,只看一个。 所以例如在这里,当我加入Col2是ABC的时候,我应该同时得到DEF& Col3的空白。
我希望我在这里有所作为。如果不够清楚,请道歉。
答案 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 |