外连接返回连接列的多个副本
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,我将其添加到我的答案中。以上是关于外连接返回连接列的多个副本的主要内容,如果未能解决你的问题,请参考以下文章