2017-09-17 136 views
1

当我在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

我在做什么错?

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

回答

2

您正在选择所有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 ... 
+0

有啥选择所有列,并只选择customer_identifier一次的方式吗? – user1871528

+0

@ user1871528,我将其添加到我的答案中。 –