Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Entfernen von Duplikaten aus dem Ergebnis einer Mehrfachverknüpfung von Tabellen mit unterschiedlichen Spalten in MySQL

Ich weiß nicht, ob ich Ihr Problem verstehe, aber warum verwenden Sie einen LEFT JOIN? Die Geschichte klingt eher wie ein INNER JOIN. Nichts hier verlangt nach einer UNION.

[Bearbeiten] OK, ich glaube, ich verstehe jetzt, was du willst. Ich habe nie versucht, was ich vorschlagen werde, und außerdem unterstützen einige DBs es (noch) nicht, aber ich denke, Sie wollen eine Fensterfunktion.

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;

Die Idee ist, die Liste in so wenig Zeilen wie möglich zu drucken, richtig? Wenn also A1 10 Einträge in Y und 7 in Z hat, dann erhalten wir 10 Zeilen mit 3 mit NULL-Werten für die Z-Felder. Dies funktioniert in Postgres. Ich glaube nicht, dass diese Syntax in MySQL verfügbar ist.

J:

 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

Ausgabe obiger Anweisung:

 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