2016-07-23 81 views
0

考慮以下表:在FULL OUTER選擇非空列JOIN

Id  | Name  | Family 
1  | name1 | family1 
2  | name2 | family2 

和:

Id  | Orderr | Countt 
1  | order1 | 17 
1  | order2 | 18 
3  | order3 | 16 

而下面的查詢:

select table1.id,table1.name,table1.family,table2.orderr,table2.countt 
from table1 FULL OUTER JOIN table2 
on table1.id = table2.id 

它返回:

Id  | Name  | Family | Orderr | Countt 
1  | name1 | family1 | order1 | 17 
1  | name1 | family1 | order2 | 18 
2  | name2 | family2 | NULL  | NULL 
NULL | NULL  | NULL  | order3 | 16 

正如你在最後一行看到的,它不會顯示Id列。如何更改我的查詢以返回最後一行中的Id列?我不想在我的選擇查詢中包含table2.id,因爲通過這種方式,我將擁有兩列Id列。

回答

4

使用COALESCE或ISNULL

COALESCE「返回其自變量之中的第一 非空表達」和ISNULL「取代NULL 與指定的替換值。」

http://sqlmag.com/t-sql/coalesce-vs-isnull

SELECT ISNULL(table1.id, table2.id) AS id, 
table1.name,table1.family,table2.orderr,table2.countt 
FROM table1 FULL OUTER JOIN table2 
ON table1.id = table2.id 

OR

SELECT COALESCE(table1.id, table2.id) AS id, 
table1.name,table1.family,table2.orderr,table2.countt 
FROM table1 FULL OUTER JOIN table2 
ON table1.id = table2.id 
+0

謝謝。你能否解釋一下ISNULL?因爲基於它的名稱,它應該返回,如果它爲空。 –

+0

我添加了一個小括號,但是如果您想獲得完整的見解,則應該詳細閱讀文章。但在你的情況下,這兩個作品。 – Massanu

2

使用coalesce

select coalesce(table1.id, table2.id) as id 

它返回列表中的第一個非空值分析的細節。