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
姓名 电话 电子邮件 附加列4table_5
电话 附加列5table_6
电话 电子邮件 附加列6每个表都有不同的数据。
我想创建一个大表,连接所有可能的数据(一个人在 1 和 3 表中,第二个在 2 表中等) - 并希望将其合并到一个大表中,例如 .
table4.name table4.phone table4.email table4.additionalColumns4 table5.phone table5.additionalColumns5 table6.phone table6.emailtable6.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的区别)