2016-07-23 45 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 

它返回列表中的第一个非空值分析的细节。