2016-05-16 37 views
0

可以说我有一个表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 

回答

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它会寻找一个非空的tab2col1值,如果它是NULL它将从tab1获取col2值,其值为col1

+0

或者,您可以使用'ISNULL'。在这种情况下,它应该像'COALESCE' ....'ISNULL(tab2.col2,tab1.col2)'一样运行。这是一个更容易阅读,伊莫。 – BenM

+0

完美。从来没有想过这个。谢谢! – Norm