我有一个具有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)。
在进行此类连接时,我应该遵循的所有最佳实践都是最有用的。
谢谢
答案 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
。