多个完全外部联接

mqkwyuun  于 2021-06-26  发布在  Impala
关注(0)|答案(3)|浏览(433)

我想用 FULL OUTER JOIN 作为一张table FULL OUTER JOIN 在另一张table上。我应该使用什么语法?
例如:t1,t2,t3是我的表,列id,name。我需要这样的东西:

  1. T1 FULL OUTER JOIN T2 on T1.id = T2.id ==> Let this be named X
  2. X FULL OUTER JOIN T3 on X.id = t3.id

我希望实现这一点,以便在最后的on子句中,我希望t3.id与 T1.id 或者 T2.id . 任何其他方法也可以。

igsr9ssn

igsr9ssn1#

你可以按照你的建议去做,使用in()

  1. FROM T1
  2. FULL OUTER JOIN T2
  3. ON(T1.id = T2.id)
  4. FULL OUTER JOIN T3
  5. ON(T3.ID IN(T2.id,T1.id))

或者我认为你可以通过工会来做到这一点(取决于你需要什么):

  1. SELECT * FROM
  2. (SELECT name,id from T1
  3. UNION
  4. SELECT name,id from T2) x
  5. FULL OUTER JOIN T3
  6. ON(t3.id = x.id)
neekobn8

neekobn82#

通常,完全外部连接的链的行为与预期不完全相同。一个替代品使用 left join . 当一个表具有您所需要的所有id时,这种方法效果最好。但你也可以构造:

  1. from (select id from t1 union
  2. select id from t2 union
  3. select id from t3
  4. ) ids left join
  5. t1
  6. on ids.id = t1.id left join
  7. t2
  8. on ids.id = t2.id left join
  9. t3
  10. on ids.id = t3.id

注意,第一个子查询通常可以被表替换。如果您有这样一个表,您可以在 where 条款:

  1. from ids left join
  2. t1
  3. on ids.id = t1.id left join
  4. t2
  5. on ids.id = t2.id left join
  6. t3
  7. on ids.id = t3.id
  8. where t1.id is not null or t2.id is not null or t3.id is not null
展开查看全部
kr98yfug

kr98yfug3#

  1. SELECT COALESCE(X.id,t3.id) AS id, *-- specific columns here instead of the *
  2. FROM
  3. (
  4. SELECT COALESCE(t1.id,t2.id) AS id, * -- specific columns here instead of the *
  5. FROM T1 FULL OUTER JOIN T2 on T1.id = T2.id
  6. ) AS X
  7. FULL OUTER JOIN T3 on X.id = t3.id

相关问题