外连接返回连接列的多个副本

Posted

技术标签:

【中文标题】外连接返回连接列的多个副本【英文标题】:outer join returns multiple copy of join columns 【发布时间】:2017-09-17 20:05:57 【问题描述】:

当我在 mssql 上执行 outer join 时,我加入的列不会合并。

这是我的代码:

select top 10 *  from customer_behaviour_1P2014  full outer join
customer_behaviour_2P2014 on customer_behaviour_1P2014.customer_identifier = customer_behaviour_2P2014.customer_identifier full outer join
customer_behaviour_3P2014 on customer_behaviour_2P2014.customer_identifier = customer_behaviour_3P2014.customer_identifier

这将返回 3 个标记为 customer_identifier 的列,而不是 1 个。

我做错了什么?

如果有什么不同,我将客户标识符作为每个表中的索引。

【问题讨论】:

【参考方案1】:

您正在从所有 3 个表中选择所有列,并且每个表都有一个 customer_identifier 列(从 ON 子句推导出来)。

结果中的每个customer_identifier 列都来自不同的表。匹配时值将相同,如果没有匹配行,则值为 NULL

指定一个明确的列列表而不是* 以避免重复值。代替 3 个单独的 customer_identifier 列,使用 COALESCE 函数返回第一个非 NULL 值:

SELECT <other-columns>,
COALESCE(customer_behaviour_1P2014.customer_identifier, customer_behaviour_2P2014.customer_identifier, customer_behaviour_3P2014.customer_identifier) AS customer_identifier
FROM ...

【讨论】:

那么选择所有列并且只选择customer_identifier一次的方法是什么? @user1871528,我将其添加到我的答案中。

以上是关于外连接返回连接列的多个副本的主要内容,如果未能解决你的问题,请参考以下文章

外连接查询

内连接与外连接

MySQL基础----[多表设计,数据库设计范式,内连接,外连接,数据库备份及导入还原 ]

内连接与外连接-及其典型案例

左连接右连接交叉连接全外连接

Linq to Entity 具有多个左外连接