在两个维度上联接两个表,而无需交叉联接

时间:2018-11-26 15:58:44

标签: sql postgresql join

我有一个具有ID和域(T1)的表。另一个具有名称和域(T2)。第三个具有名称和ID(T3)。

以简化形式,我的查询如下:

SELECT *
FROM T2
LEFT JOIN T1 
ON T2.domain = T1.domain 
) 
LEFT JOIN T3
ON T1.name = T3.name

我正在寻找的输出是一个包含以下列的列表:“ ID”,“ Name”和“ Domain”,其中域或名称匹配以获取ID。我面临的挑战是,一个域可以与两个名称匹配,这会造成一组误报(由于名称匹配,因此也会产生错误的ID)。

在进行此类连接时,我应该遵循的所有最佳实践都是最有用的。

谢谢

1 个答案:

答案 0 :(得分:1)

我想你想要

SELECT t2.name, t2.domain, coalesce(t1.id, t2.id)
FROM T2 LEFT JOIN
     T1 
     ON T2.domain = T1.domain LEFT JOIN
     T3
     ON T2.name = T3.name AND
        t1.domain IS NULL;  -- no match on T1

这首先匹配domain。然后,如果没有domain匹配项,它将使用name