From: | Clem Dickey <dickeycl(at)us(dot)ibm(dot)com> |
---|---|
To: | pgsql-sql(at)postgresql(dot)org |
Subject: | "<query expression body> ::= <joined table>" grammar rule not accepted by Postgres |
Date: | 2011-06-15 21:50:09 |
Message-ID: | OF650DD52B.2DDBF653-ON852578B0.00699C93-882578B0.0077F2AD@us.ibm.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
This expression is (I think) a well-formed query, but is rejected by
Postgresql 8.4 (t is a table name).
t t1 NATURAL JOIN t t2;
Here is the relevant parts of grammar (with some optional elements omitted
for simplicity):
<query expression> ::= <query expression body>
<query expression body> ::= <joined table>
<joined table> ::= <natural join>
<natural join> ::= <table reference> NATURAL JOIN <table primary>
<table reference> ::= <table primary>
<table primary> ::= <table or query name> [ <correlation name> ]
<table or query name> ::= <table name>
Nor is this use of <joined table> accepted in the <query expression> form
of a <with list element>:
WITH tw AS ( t t1 NATURAL JOIN t t2 ) TABLE tw;
This leads me to believe that the unrecognized grammar rule (in SQL99
standard terms) is
<query expression body> ::= <joined table>
There are, of course, other ways to express the operation, including
SELECT * FROM (t t1 NATURAL JOIN t t2);
But I am curious why the first expression is not accepted, besides the
immediately obvious "it's not in the Postgres version of the SQL grammar."
Clem Dickey
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2011-06-16 05:59:12 | Re: "<query expression body> ::= <joined table>" grammar rule not accepted by Postgres |
Previous Message | Samuel Gendler | 2011-06-15 20:52:27 | Re: finding gaps in temporal data |