No sé si entiendo su problema, pero ¿por qué está usando LEFT JOIN? La historia suena más como una UNIÓN INTERNA. Nada aquí exige una UNIÓN.
[Editar] OK, creo que veo lo que quieres ahora. Nunca probé lo que estoy a punto de sugerir y, lo que es más, algunas bases de datos no lo admiten (todavía), pero creo que desea una función de ventana.
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;
La idea es imprimir la lista en la menor cantidad de filas posible, ¿no? Entonces, si A1 tiene 10 entradas en Y y 7 en Z, entonces obtenemos 10 filas con 3 que tienen NULL para los campos Z. Esto funciona en Postgres. No creo que esta sintaxis esté disponible en 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
Salida de la declaración anterior:
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