Jeg ved ikke, om jeg forstår dit problem, men hvorfor bruger du en LEFT JOIN? Historien lyder mere som en INNER JOIN. Intet her kræver en UNION.
[Rediger] OK, jeg tror, jeg kan se, hvad du vil have nu. Jeg har aldrig prøvet det, jeg er ved at foreslå, og hvad mere er, nogle DB'er understøtter det ikke (endnu), men jeg tror, du vil have en vinduesfunktion.
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;
Ideen er at udskrive listen i så få rækker som muligt, ikke? Så hvis A1 har 10 indtastninger i Y og 7 i Z, så får vi 10 rækker med 3 med NULL for Z-felterne. Dette virker i Postgres. Jeg tror ikke, at denne syntaks er tilgængelig i 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
Output af udsagn ovenfor:
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