Nevím, jestli rozumím vašemu problému, ale proč používáte LEFT JOIN? Příběh zní spíše jako INNER JOIN. Nic zde nevyžaduje UNIE.
[Edit]OK, myslím, že teď vidím, co chceš. Nikdy jsem nezkoušel to, co se chystám navrhnout, a co víc, některé DB to (zatím) nepodporují, ale myslím, že chcete funkci oken.
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;
Cílem je vytisknout seznam v co nejmenším počtu řádků, že? Takže pokud má A1 10 položek v Y a 7 v Z, pak dostaneme 10 řádků, z nichž 3 mají NULL pro pole Z. V Postgresu to funguje. Nevěřím, že tato syntaxe je v MySQL dostupná.
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
Výstup výše uvedeného prohlášení:
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