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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果没有条件与连接两侧的字段相等,则不能使用FULL OUTER JOIN相关的知识,希望对你有一定的参考价值。

我有3张桌子

TABLE_4

  • 那么
  • 电话
  • 电子邮件
  • additionalColumns4

table_5

  • 电话
  • additionalColumns5

table_6

  • 电话
  • 电子邮件
  • additionalColumns6

每个表都有不同的数据。

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

  • table4.那么
  • table4.phone
  • table4.email
  • table4.additionalColumns4
  • table5.phone
  • table5.additionalColumns5
  • table6.phone
  • table6.email
  • table6.additionalColumns6 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

效果很好,但是

  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在完全加入条件下?

答案

编写单独的查询,然后使用COALESCE。 (感谢发布a nice example的Ajit Deshmukh。)

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

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

sql 各种连接的使用条件,

oracle用rowid去掉重复值

oracle 查询条件中判断两个字段相等时 一个字段为空则跳过

BigQuery Left Outer 出现 OR 条件错误

充分条件