具有相同特征但不同测度的Join或Union表



我想了解连接具有相同特征和不同度量的两个表的简单/更好的方法,如下面的例子所述:

tab1

<表类> Col1 Col2 Measure1 tbody><<tr>1110125

full join是正确的方法。但是您需要在select子句中消除col1col2的歧义:两个表都有两个列,因此不清楚不带前缀的col1指的是哪个列。

典型的方法是使用coalesce():

select 
coalesce(t1.col1, t2.col1) col1,
coalesce(t1.col2, t2.col2) col2,
coalesce(t1.measure1, 0) measure1, 
coalesce(t2.measure2, 0) measure2
from tab1 t1
full outer jon tab2 t2 
on t1.col1 = t2.col1 and t1.col2 = t2.col2

请注意,您还需要在度量周围使用coalesce()来返回0,而不是在"丢失"时返回null。值。

在一些数据库中(例如Postgres),您可以使用using语法来声明表中具有相同名称的列的连接条件;该语法自动消除无前缀列名的歧义,因此:

select 
col1,
col2,
coalesce(t1.measure1, 0) measure1, 
coalesce(t2.measure2, 0) measure2
from tab1 t1
full join tab2 t2 using (col1, col2)

您也应该引用col1col2的源表。

当你使用FULL OUTER JOIN时,我建议使用COALESCE语句。

SELECT COALESCE(t1.col1, t2.col1) as col1,
COALESCE(t1.col2, t2.col2) as col2, 
t1.Measure1, 
t2.Measure2
FROM tab1 t1
FULL OUTER JOIN tab2 t2
on t1.col1 = t2.col1
and t1.col2 = t2.col2

最新更新