多个完全外部联接
Multiple Full Outer Joins
我想将 FULL OUTER JOIN
的结果用作另一个 table 上的 table 到 FULL OUTER JOIN
。我应该使用什么语法?
例如:T1、T2、T3 是我的 table,其中包含列 id、名称。我需要这样的东西:
T1 FULL OUTER JOIN T2 on T1.id = T2.id ==> Let this be named X
X FULL OUTER JOIN T3 on X.id = t3.id
我希望实现这一点,以便在最后的 ON 子句中,我希望 T3.id 匹配 T1.id
或 T2.id
。任何替代方法也可以。
您可以按照建议的方式使用 IN()
FROM T1
FULL OUTER JOIN T2
ON(T1.id = T2.id)
FULL OUTER JOIN T3
ON(T3.ID IN(T2.id,T1.id))
或者我认为您可以使用 UNION 来完成(取决于您的需要):
SELECT * FROM
(SELECT name,id from T1
UNION
SELECT name,id from T2) x
FULL OUTER JOIN T3
ON(t3.id = x.id)
SELECT COALESCE(X.id,t3.id) AS id, *-- specific columns here instead of the *
FROM
(
SELECT COALESCE(t1.id,t2.id) AS id, * -- specific columns here instead of the *
FROM T1 FULL OUTER JOIN T2 on T1.id = T2.id
) AS X
FULL OUTER JOIN T3 on X.id = t3.id
通常,完整外部联接链的行为并不像预期的那样。一个替换使用 left join
。当 table 具有您需要的所有 ID 时,此方法效果最佳。但你也可以这样构造:
from (select id from t1 union
select id from t2 union
select id from t3
) ids left join
t1
on ids.id = t1.id left join
t2
on ids.id = t2.id left join
t3
on ids.id = t3.id
请注意,第一个子查询通常可以替换为 table。如果你有这样一个table,你可以select where
子句中的匹配行:
from ids left join
t1
on ids.id = t1.id left join
t2
on ids.id = t2.id left join
t3
on ids.id = t3.id
where t1.id is not null or t2.id is not null or t3.id is not null
我想将 FULL OUTER JOIN
的结果用作另一个 table 上的 table 到 FULL OUTER JOIN
。我应该使用什么语法?
例如:T1、T2、T3 是我的 table,其中包含列 id、名称。我需要这样的东西:
T1 FULL OUTER JOIN T2 on T1.id = T2.id ==> Let this be named X
X FULL OUTER JOIN T3 on X.id = t3.id
我希望实现这一点,以便在最后的 ON 子句中,我希望 T3.id 匹配 T1.id
或 T2.id
。任何替代方法也可以。
您可以按照建议的方式使用 IN()
FROM T1
FULL OUTER JOIN T2
ON(T1.id = T2.id)
FULL OUTER JOIN T3
ON(T3.ID IN(T2.id,T1.id))
或者我认为您可以使用 UNION 来完成(取决于您的需要):
SELECT * FROM
(SELECT name,id from T1
UNION
SELECT name,id from T2) x
FULL OUTER JOIN T3
ON(t3.id = x.id)
SELECT COALESCE(X.id,t3.id) AS id, *-- specific columns here instead of the *
FROM
(
SELECT COALESCE(t1.id,t2.id) AS id, * -- specific columns here instead of the *
FROM T1 FULL OUTER JOIN T2 on T1.id = T2.id
) AS X
FULL OUTER JOIN T3 on X.id = t3.id
通常,完整外部联接链的行为并不像预期的那样。一个替换使用 left join
。当 table 具有您需要的所有 ID 时,此方法效果最佳。但你也可以这样构造:
from (select id from t1 union
select id from t2 union
select id from t3
) ids left join
t1
on ids.id = t1.id left join
t2
on ids.id = t2.id left join
t3
on ids.id = t3.id
请注意,第一个子查询通常可以替换为 table。如果你有这样一个table,你可以select where
子句中的匹配行:
from ids left join
t1
on ids.id = t1.id left join
t2
on ids.id = t2.id left join
t3
on ids.id = t3.id
where t1.id is not null or t2.id is not null or t3.id is not null