2017-09-17 7 views
1

Lorsque je fais un outer join sur mssql, les colonnes auxquelles je me joins ne se combinent pas.La jointure externe renvoie plusieurs copies des colonnes de jointure

Voici mon code:

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 

Ce retourne 3 colonnes intitulées customer_identifier, au lieu de 1.

Qu'est-ce que je fais mal?

Si cela fait une différence, j'ai fait un identifiant de client un index dans chaque table.

Répondre

2

Vous sélectionnez toutes les colonnes des 3 tables et chaque table a une colonne customer_identifier (déduite des clauses ON).

Chaque colonne customer_identifier dans le résultat provient d'une table différente. Les valeurs seront les mêmes lors de la correspondance ou NULL lorsqu'aucune ligne ne correspond.

Spécifiez une liste de colonnes explicite au lieu de * pour éviter de répéter les valeurs. Au lieu des 3 customer_identifier séparées colonnes, utilisez une fonction COALESCE pour retourner la première valeur non 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

alors quelle est la façon de sélectionner toutes les colonnes et sélectionnez seulement customer_identifier une fois? – user1871528

+0

@ user1871528, j'ai ajouté cela à ma réponse. –