X-Original-To: pgsql-sql@postgresql.org Received: from localhost (postgresql.org [64.49.215.8]) by postgresql.org (Postfix) with ESMTP id C2DB7474E44 for ; Tue, 18 Feb 2003 05:34:27 -0500 (EST) Received: from fzkmail2.fzk.de (fzkmail2.fzk.de [141.52.27.52]) by postgresql.org (Postfix) with SMTP id AEA2E474E42 for ; Tue, 18 Feb 2003 05:34:26 -0500 (EST) Received: FROM resy5.fzk.de BY fzkmail2.fzk.de ; Tue Feb 18 11:34:27 2003 +0100 Received: œby rodos.fzk.de with ESMTP (8.8.6 (PHNE_17135)/8.7.1) id LAA28262; Tue, 18 Feb 2003 11:34:27 +0100 (MET) Message-ID: <3E520C32.CD9C82FA@rodos.fzk.de> Date: Tue, 18 Feb 2003 11:34:26 +0100 From: Christoph Haller X-Mailer: Mozilla 4.77 [en] (X11; U; HP-UX B.10.20 9000/780) X-Accept-Language: en MIME-Version: 1.0 To: pgsql-sql@postgresql.org Cc: mallah@trade-india.com Subject: Re: " Adding missing FROM-clause entry for table .... " problem. Content-Type: text/plain; charset=iso-8859-2 Content-Transfer-Encoding: 7bit X-Virus-Scanned: by AMaViS new-20020517 X-Archive-Number: 200302/394 X-Sequence-Number: 11792 > > We find that if we alias a tablename and refer to that tablename in where cluase instead of reffering > to the alias it produces wrond results. > > EG: > select to_char(a.generated, 'DD/Mon/YYYY' ) ,userid,email,descr from membership_invoice a join payment_classes using( payment_class) > join users using(userid) join membership_status using(userid) where membership_invoice.status='a' and granted is fa lse and > membership_invoice.last_reminder is null and current_date - date(a.generated) > 4 limit 10 ; > NOTICE: Adding missing FROM-clause entry for table "membership_invoice" > > Where as merely rewriting the quer to use defined aliases gives the correct results. > > select to_char(a.generated, 'DD/Mon/YYYY' ) ,userid,email,descr from membership_invoice a join payment_classes > using(payment_class) join users using(userid) join membership_status using(userid) where a.status='a' and granted i s > false and a.last_reminder is null and current_date - date(a.generated) > 4 ; > > Can Anyone please explain if its a BUG or problem in my understanding > I think it's a problem in understanding. The documentation (7.2.1) states (as the NOTICE: does) 2.2.1.3. Table and Column Aliases A temporary name can be given to tables and complex table references to be used for references to the derived table in further processing. This is called a table alias. FROM table_reference AS alias Here, alias can be any regular identifier. The alias becomes the new name of the table reference for the current query -- it is no longer possible to refer to the table by the original name. Thus SELECT * FROM my_table AS m WHERE my_table.a > 5; is not valid SQL syntax. What will actually happen (this is a PostgreSQL extension to the standard) is that an implicit table reference is added to the FROM clause, so the query is processed as if it were written as SELECT * FROM my_table AS m, my_table AS my_table WHERE my_table.a > 5; Regards, Christoph