Sql server 外部联接返回联接列的多个副本
当我在mssql上执行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
外部联接时
,我联接的列不会合并
这是我的密码:
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,我在回答中添加了这一点。