2016-03-25 26 views
0

比方說,我有2個表是這樣的: enter image description hereSQL加入2列時,其中一個爲空/空

我想加入的兩列#TMP1 &#TMP2:col2的& COL3。但是,如果這些列中的任何一個的值爲空或空,我想忽略該列並只看一個列。 因此,例如在這裏,當我加入Col2是ABC的地方時,我應該同時獲得DEF & Col3的空白。

我希望我在這裏有所幫助。如果不夠清楚,請道歉。

+0

不知道我在下面。你能分享一下你對這個樣本數據集的預期結果嗎? – Mureinik

+0

@Mureinik:好了,所以當我加入#TMP1&#用於col2的和COL3 TMP2,我想: ' '測試1', 'ABC', 'DEF' '測試1', 'ABC', '' 「 Test2',AAA','BBB' 'Test2','CCC','BBB'' – Abhi

+0

加入表格的條件是什麼。它是一個交叉連接嗎? – navigator

回答

0

表可以使用union用於這種檢查,如果兩列中的至少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 | 
+0

謝謝@sgeddes!我認爲就是這樣.. – Abhi

0

我無法從你的例子告訴你想加入,但要解決「空」的問題哪些列你做這樣的

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是用null

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