"Fernando Cano" <fc...@uniovi.es> writes:
> This sentences are valid with your grammar but generate an error. 

> create table t1 ( id_t1 smallint, name text);
> create table t2 ( id_t2 smallint, name text);

> select * from natural join using (id) ;
> select * from t1 natural cross join t2;
> select * from natural cross join using (id) ;
> select * from t1 join t2;
> select t1  natural left join t2;

Uh, no, they're *not* valid with our grammar --- that's why you're
getting errors.  They're not valid according to the SQL standard
either, so I'm not sure exactly what your point is.

> I have problems when I explain to my students the sintax of the joins.

The SQL92 standard defines join syntax like this:

         <joined table> ::=
                <cross join>
              | <qualified join>
              | <left paren> <joined table> <right paren>

         <cross join> ::=
              <table reference> CROSS JOIN <table reference>

         <qualified join> ::=
              <table reference> [ NATURAL ] [ <join type> ] JOIN
                <table reference> [ <join specification> ]

         <join specification> ::=
                <join condition>
              | <named columns join>

         <join condition> ::= ON <search condition>

         <named columns join> ::=
              USING <left paren> <join column list> <right paren>

         <join type> ::=
                INNER
              | <outer join type> [ OUTER ]
              | UNION

         <outer join type> ::=
                LEFT
              | RIGHT
              | FULL

         <join column list> ::= <column name list>

The restriction that NATURAL can't appear with ON or USING isn't
in this syntax diagram, though; it's explained in the text.

                        regards, tom lane

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

Reply via email to