Current we give predefined aliases like F0, F1, ... to FROM clause items based on position in the FROM clause that leads to ambiguities for correlated attributes.
Example problematic query:
SELECT * FROM R WHERE EXISTS (SELECT * FROM S x WHERE B = x.d AND EXISTS (SELECT * FROM T));
ERROR (metadata_lookup_oracle.c:151) METADATA LOOKUP - OCILIB Error ORA-00904 - msg : ORA-00904: "F0"."F": invalid identifier
SQL
===
SELECT F0.A AS A, F0.B AS B
FROM (R F0), LATERAL (SELECT CASE WHEN count(*) > 0 THEN 1 ELSE 0 END AS "nesting_eval_1" FROM (
SELECT F0.C AS C, F0.D AS D
FROM (S F0), LATERAL (SELECT CASE WHEN count(*) > 0 THEN 1 ELSE 0 END AS "nesting_eval_1" FROM (
SELECT F0.E AS E, F0.F AS F
FROM (T F0)) F0) F1
WHERE ((F0.D = F0.F) AND (F1."nesting_eval_1" = 1))) F0) F1
WHERE (F1."nesting_eval_1" = 1)
Current we give predefined aliases like
F0
,F1
, ... to FROM clause items based on position in the FROM clause that leads to ambiguities for correlated attributes.Example problematic query: