Во-первых, обратите внимание, что в предоставленном запросе FULL OUTER JOIN
, который вы запрашиваете, может быть переписан как:
SELECT *
FROM (SELECT * FROM A WHERE z = 1) A
FULL OUTER JOIN (SELECT * FROM B WHERE z = 1) B ON A.z = B.z
, что делает (IMO) более ясным, что источники данных и каково условие соединенияявляется.На мгновение, с вашим WHERE
состоянием, у меня возникло ощущение, что вы на самом деле хотите ВНУТРЕННЕЕ СОЕДИНЕНИЕ.
С этим вы можете расширяться легче, вероятно:
SELECT *
FROM (SELECT * FROM A WHERE z = 1) A
FULL OUTER JOIN (SELECT * FROM B WHERE z = 1) B ON A.z = B.z
FULL OUTER JOIN (SELECT * FROM C WHERE z = 1) C ON COALESCE(A.z,B.z) = C.z
FULL OUTER JOIN (SELECT * FROM D WHERE z = 1) D ON COALESCE(A.z,B.z,C.z) = D.z