忽略空表并从非空表

时间:2016-05-16 14:07:56

标签: sql sql-server

假设我有一个表格tab1,数据是:

col1 col2  col3
20  15  2016-04-04 00:00:00.000
25  25  2016-03-03 00:00:00.000
14  14  2016-03-03 22:22:22.223
54  34  2016-04-04 21:22:33.333

另一个表tab2是一个空表:

col1  col2   col3

我想要的是它应该始终从tab2收集值,如果tab2为空,它将移动到tab1并从那里收集值。

我知道当列为空时我可以使用COALESCE。但它返回空列。这就是我尝试过的(假设我有一个大数据集):

select coalesce(tab2.col2, tab1.col2) ab
from tab2, tab1   

1 个答案:

答案 0 :(得分:2)

这个问题:

select coalesce(tab2.col2, tab1.col2) ab
from tab2, tab1 

不是合并的;它是加入。或者缺少连接,而不是。

您需要正确加入表格,如:

select coalesce(tab2.col2, tab1.col2) ab
from tab1 LEFT OUTER JOIN tab2 ON tab1.col1 = tab2.col1

我加入了Col1,所以当您coalesce() col2时,它会在tab2中为col1值寻找非空值,如果它是NULL,它会从col2获取相同tab1值的col1值。