Jag vet inte om jag förstår ditt problem, men varför använder du en LEFT JOIN? Berättelsen låter mer som en INNER JOIN. Ingenting här kräver en UNION.
[Redigera] OK, jag tror att jag ser vad du vill nu. Jag har aldrig provat det jag ska föreslå, och dessutom har vissa DB:er inte stöd för det (ännu), men jag tror att du vill ha en fönsterfunktion.
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;
Tanken är väl att skriva ut listan i så få rader som möjligt? Så om A1 har 10 poster i Y och 7 i Z, så får vi 10 rader där 3 har NULL för Z-fälten. Detta fungerar i Postgres. Jag tror inte att den här syntaxen är tillgänglig 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
Utdata från påståendet ovan:
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