Sql server 外部联接返回联接列的多个副本

Sql server 外部联接返回联接列的多个副本,sql-server,sql-server-2008,pymssql,Sql Server,Sql Server 2008,Pymssql,当我在mssql上执行外部联接时,我联接的列不会合并 这是我的密码: 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_be

当我在mssql上执行
外部联接时
,我联接的列不会合并

这是我的密码:

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
这将返回标记为customer_identifier的3列,而不是1列

我做错了什么


如果有任何区别,我会在每个表中设置客户标识符索引。

您正在从所有3个表中选择所有列,并且每个表都有一个
customer\u标识符
列(从
ON
子句中推断)

结果中的每个
customer\u identifier
列都来自不同的表。匹配时,值将相同;行不匹配时,值将相同

指定一个显式列列表,而不是
*
,以避免重复值。使用
COALESCE
函数返回第一个非空值,而不是3个单独的
customer\u identifier
列:

SELECT <other-columns>,
COALESCE(customer_behaviour_1P2014.customer_identifier, customer_behaviour_2P2014.customer_identifier, customer_behaviour_3P2014.customer_identifier) AS customer_identifier
FROM ...
SELECT,
合并(客户行为\u 1P2014.customer\u标识符、客户行为\u 2P2014.customer\u标识符、客户行为\u 3P2014.customer\u标识符)作为客户标识符
从…起

那么,如何选择所有列并只选择一次客户标识?@user1871528,我在回答中添加了这一点。