FULL OUTER JOIN 不能在没有连接两边的字段相等的条件下使用

Posted

技术标签:

【中文标题】FULL OUTER JOIN 不能在没有连接两边的字段相等的条件下使用【英文标题】:FULL OUTER JOIN cannot be used without a condition that is an equality of fields from both sides of the join 【发布时间】:2018-03-02 16:30:47 【问题描述】:

我有 3 张类似的桌子

table_4

姓名 电话 电子邮件 附加列4

table_5

电话 附加列5

table_6

电话 电子邮件 附加列6

每个表都有不同的数据。

我想创建一个大表,连接所有可能的数据(一个人在 1 和 3 表中,第二个在 2 表中等) - 并希望将其合并到一个大表中,例如 .

table4.name table4.phone table4.email table4.additionalColumns4 table5.phone table5.additionalColumns5 table6.phone table6.email

table6.additionalColumns6

选择 * 从 表_4 完全加入 表_5 在 table_5_field_s_mail_dmp_id =table_4_field_email_dmp_id 完全加入 表_6 在 table_6_field_phone2_dmp_id =table_4_field_phone_dmp_id

效果很好,但是

  SELECT
    *
  FROM
    table_4 
  FULL JOIN
    table_5
  ON
    table_5_field_s_mail_dmp_id =table_4_field_email_dmp_id
  FULL JOIN
    table_6
  ON
       table_6_field_phone2_dmp_id     =table_4_field_phone_dmp_id
    OR table_6_field_phone1_dmp_id     =table_4_field_phone_dmp_id
    OR table_6_field_workphone_dmp_id  =table_4_field_phone_dmp_id
    OR table_6_field_addphone_dmp_id   =table_4_field_phone_dmp_id
    OR table_6_field_email_dmp_id      =table_5_field_s_mail_dmp_id
    OR table_6_field_email_dmp_id      =table_4_field_email_dmp_id 

返回

错误:如果没有连接两侧的字段相等的条件,则无法使用 FULL OUTER JOIN。

我无法理解这个错误以及如何解决我的问题

已添加 我检查了

SELECT
  *
FROM
  table_4
FULL JOIN
  table_6
ON
  (table_6_field_phone2_dmp_id =table_4_field_phone_dmp_id
  OR table_6_field_phone1_dmp_id =table_4_field_phone_dmp_id
  )

它也返回相同的错误。大查询在完全连接条件下不喜欢 OR?

【问题讨论】:

在了解更多细节之前 - 你能澄清为什么你需要 FULL OUTER JOIN 吗?不知何故,我觉得那些应该是 LEFT JOIN - 但当然我可能是错的 - 所以请澄清。我认为如果您可以在表格和预期输出中显示您的行的简化示例 - 这会有所帮助 我有几个表,例如 sales1( *name *phone *additionalColumns) sales2 (*email *additionalColumns) sales3 (*phone *email *additionalColumns) 我想创建一个包含所有可能数据的大表已连接(一个人在 1 和 3 表中,第二人在 2 表中等) “所有可能的数据连接”过于笼统的陈述,可能意味着许多不同的事情,因此实现。您能否更具体一些并提供输入(3 个表格)和预期输出(1 个表格)的简化示例 我编辑了我的问题并添加了一些示例 【参考方案1】:

编写单独的查询,然后使用COALESCE。 (归功于 Ajit Deshmukh, 谁发布了a nice example。)

【讨论】:

以上是关于FULL OUTER JOIN 不能在没有连接两边的字段相等的条件下使用的主要内容,如果未能解决你的问题,请参考以下文章

如果没有条件与连接两侧的字段相等,则不能使用FULL OUTER JOIN

Oracle表与表之间的连接方式(内连接:inner join 外连接 全连接: full outer join左连接:left outer join 右连接:right outer join(代码

oracle 内连接(inner join)外连接(outer join)全连接(full join)

SQL的JOIN语法解析(inner join, left join, right join, full outer join的区别)

SQL的JOIN语法解析(inner join, left join, right join, full outer join的区别)

模拟 FULL OUTER JOIN:LEFT+RIGHT JOIN 与交叉连接的 UNION 性能