Ik weet niet of ik je probleem begrijp, maar waarom gebruik je een LEFT JOIN? Het verhaal klinkt meer als een INNERLIJKE JOIN. Niets hier vraagt om een UNIE.
[Bewerken] OK, ik denk dat ik nu begrijp wat je wilt. Ik heb nog nooit geprobeerd wat ik ga voorstellen, en bovendien ondersteunen sommige DB's het (nog) niet, maar ik denk dat je een vensterfunctie wilt.
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;
Het idee is om de lijst in zo min mogelijk rijen af te drukken, toch? Dus als A1 10 items heeft in Y en 7 in Z, dan krijgen we 10 rijen met 3 met NULL's voor de Z-velden. Dit werkt in Postgres. Ik geloof niet dat deze syntaxis beschikbaar is in MySQL.
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
Uitvoer van bovenstaande verklaring:
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