sql >> Base de Datos >  >> RDS >> Mysql

Eliminación de duplicados del resultado de múltiples combinaciones en tablas con diferentes columnas en MySQL

No sé si entiendo su problema, pero ¿por qué está usando LEFT JOIN? La historia suena más como una UNIÓN INTERNA. Nada aquí exige una UNIÓN.

[Editar] OK, creo que veo lo que quieres ahora. Nunca probé lo que estoy a punto de sugerir y, lo que es más, algunas bases de datos no lo admiten (todavía), pero creo que desea una función de ventana.

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;

La idea es imprimir la lista en la menor cantidad de filas posible, ¿no? Entonces, si A1 tiene 10 entradas en Y y 7 en Z, entonces obtenemos 10 filas con 3 que tienen NULL para los campos Z. Esto funciona en Postgres. No creo que esta sintaxis esté disponible en 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

Salida de la declaración anterior:

 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