Mysql
 sql >> Database >  >> RDS >> Mysql

Rimozione dei duplicati dal risultato di più join su tabelle con colonne diverse in MySQL

Non so se ho capito il tuo problema, ma perché stai usando un LEFT JOIN? La storia suona più come un INNER JOIN. Niente qui richiede un'UNIONE.

[Modifica] OK, penso di vedere quello che vuoi ora. Non ho mai provato quello che sto per suggerire e, per di più, alcuni DB non lo supportano (ancora), ma penso che tu voglia una funzione di windowing.

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'idea è di stampare l'elenco nel minor numero di righe possibile, giusto? Quindi, se A1 ha 10 voci in Y e 7 in Z, otteniamo 10 righe con 3 con NULL per i campi Z. Questo funziona in Postgres. Non credo che questa sintassi sia disponibile in 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

Risultato della dichiarazione sopra:

 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