あなたの問題を理解しているかどうかはわかりませんが、なぜLEFT JOINを使用しているのですか?物語はより内側の結合のように聞こえます。ここではUNIONを必要とするものはありません。
[編集]OK、あなたが今欲しいものが見えたと思います。私が提案しようとしていることを試したことがありません。さらに、一部のDBは(まだ)それをサポートしていませんが、ウィンドウ関数が必要だと思います。
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;
アイデアは、リストをできるだけ少ない行に印刷することですよね?したがって、A1にYに10個のエントリがあり、Zに7個のエントリがある場合、ZフィールドにNULLを持つ3個の行が10個取得されます。これはPostgresで機能します。この構文が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
上記のステートメントの出力:
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