PALAYRET Jacques <jacques.palay...@meteo.fr> writes:
> For me, one of the two following things should be true : either the hint (in 
> case of a lateral error) is incomplete or the possibility of " cross join 
> lateral " should be removed. 

The reason the hint is worded the way it is is a practical one: the other
possibilities are not drop-in syntactic replacements.

Given

        CREATE TABLE t (x float8);

all five of these are syntactically legal (with or without the
implied LATERAL):

        SELECT * FROM t, sin(x);
        SELECT * FROM t CROSS JOIN sin(x);
        SELECT * FROM t JOIN sin(x) ON true;
        SELECT * FROM t INNER JOIN sin(x) ON true;
        SELECT * FROM t LEFT JOIN sin(x) ON true;

The only way to get to the error in question is to write something
like

        SELECT * FROM t FULL JOIN sin(x) ON true;

If that's what you have, then changing FULL to INNER or LEFT will
produce a syntactically legal query; changing it to CROSS will not
unless you make additional changes (which'd be hard if the ON
condition were nontrivial).

Also, if we were trying to be completionist, we'd have to somehow
work in the comma and implicit-INNER syntaxes, which would surely
make the hint a confusing mess.

Another way to look at it is that there are only two allowed
semantic behaviors here: INNER and LEFT joins.  The fact that
there's more than one way to spell an inner join is a historical
accident.

                        regards, tom lane


Reply via email to