Mysql
 sql >> Base de données >  >> RDS >> Mysql

Suppression des doublons du résultat d'une jointure multiple sur des tables avec différentes colonnes dans MySQL

Je ne sais pas si je comprends votre problème, mais pourquoi utilisez-vous un LEFT JOIN? L'histoire ressemble plus à un INNER JOIN. Rien ici n'appelle une UNION.

[Modifier] OK, je pense que je vois ce que vous voulez maintenant. Je n'ai jamais essayé ce que je m'apprête à suggérer, et en plus, certaines bases de données ne le supportent pas (encore), mais je pense que vous voulez une fonction de fenêtrage.

WITH Y2 AS (SELECT Y.*, ROW_NUMBER() OVER (PARTITION BY A) AS YROW FROM Y),
     Z2 AS (SELECT Z.*, ROW_NUMBER() OVER (PARTITION BY A) AS ZROW FROM Z)
SELECT COALESCE(Y2.A,Z2.A) AS A, Y2.C, Y2.D, Z2.E, Z2.F, Z2.G
FROM Y2 FULL OUTER JOIN Z2 ON Y2.A=Z2.A AND YROW=ZROW;

L'idée est d'imprimer la liste en aussi peu de lignes que possible, n'est-ce pas ? Donc, si A1 a 10 entrées dans Y et 7 dans Z, alors nous obtenons 10 lignes dont 3 ayant des valeurs NULL pour les champs Z. Cela fonctionne dans Postgres. Je ne crois pas que cette syntaxe soit disponible dans MySQL.

Y :

 a | d | c  
---+---+----
 1 | 1 | -1
 1 | 2 | -1
 2 | 0 | -1

Z :

 a | f | g | e 
---+---+---+---
 1 | 9 | 9 | 0
 2 | 1 | 1 | 0
 3 | 0 | 1 | 0

Sortie de la déclaration ci-dessus :

 a | c  | d | e | f | g 
---+----+---+---+---+---
 1 | -1 | 1 | 0 | 9 | 9
 1 | -1 | 2 |   |   |  
 2 | -1 | 0 | 0 | 1 | 1
 3 |    |   | 0 | 0 | 1