SQL Full Outer Join W / Coalesce

时间:2017-07-24 22:34:34

标签: sql join

为什么此查询在某些情况下会产生重复?

Table_1   
ID   
1  
2  
3  


Table_2  
ID  
1  
2  
4  

Table_3  
ID  
1  
3  
4  

查询:

SELECT COALESCE(Table_1.ID, Table_2.ID, Table_3.ID)  
FROM Table_1

FULL OUTER JOIN TABLE_2  
ON Table1.ID=Table_2.ID  

FULL OUT JOIN TABLE_3  
ON Table1.ID=Table3.ID;

结果:

1  
2  
3  
4  
4  

查询复制T1为空且T2 / T3共享相同值的所有值。删除任何其他组合的重复项。

1 个答案:

答案 0 :(得分:3)

这有点难以解释。如果您显示其他ID,您将看到发生的全部事件:

"coalesce"  "id1"   "id2"   "id3"
    1         1      1        1
    2         2      2        .
    3         3      .        3
    4         .      4        .
    4         .      .        4

您可以看到结果here

所以,你得到一排因为t1&当t2与t2.id = 4t1.id = null不匹配时,会创建一行。然后,在t3.id = 4时你得到同样的东西。比较是t1.id - 所以你得到另一行。没有与t2.id进行比较。

我怀疑你的逻辑更像是这样:

select coalesce(t1.id, t2.id, t3.id)
from t1 full join
     t2
     using (id) full join
     t3
     using (id);

Here是SQL小提琴。