Thread: Strange Query Question

Strange Query Question

From
OTR Comm
Date:
Hello,

I found a query in some code that I am evaluating:

$query = qq|SELECT ap.id, ap.invnumber, vendor.name,
              acc_trans.transdate, ap.invoice, acc_trans.amount
              FROM ap, acc_trans
              WHERE $where
              AND acc_trans.accno = $form->{accno}
              AND acc_trans.trans_id = ap.id
              AND ap.vendor = vendor.id|;

The code executes properly, but I do not see how this query can work
without a FROM reference to the vendor table.  How does this happen?

I do not understand how you can have a reference to 'vendor.id' here
with reference to the vendor table (which does exist in the database).

Incidently, '$where' is set to 'true' in previous code prior to building
the query.

Thanks,
Murrah Boswell


Re: Strange Query Question

From
Tom Lane
Date:
OTR Comm <otrcomm@wildapache.net> writes:
> $query = qq|SELECT ap.id, ap.invnumber, vendor.name,
>               acc_trans.transdate, ap.invoice, acc_trans.amount
>               FROM ap, acc_trans
>               WHERE $where
>               AND acc_trans.accno = $form->{accno}
>               AND acc_trans.trans_id = ap.id
>               AND ap.vendor = vendor.id|;

> The code executes properly, but I do not see how this query can work
> without a FROM reference to the vendor table.  How does this happen?

Postgres lets you get away with that.  It's not strictly legal per
SQL92, but the equivalent construction worked in the old PostQuel
language, and we've just sort of never wanted to break it.

This has confused a lot of people, so beginning in 7.1 there'll be
a warning notice when you mix explicit-FROM and implied-FROM styles
as above:

NOTICE:  Adding missing FROM-clause entry for table "vendor"

            regards, tom lane