我想了解连接具有相同特征和不同度量的两个表的简单/更好的方法,如下面的例子所述:
tab1
<表类>
Col1
Col2
Measure1
tbody><<tr>1 1 10 12 5 表类>
full join
是正确的方法。但是您需要在select
子句中消除col1
和col2
的歧义:两个表都有两个列,因此不清楚不带前缀的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)
您也应该引用col1
和col2
的源表。
当你使用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