Thread: strange behvaviour in join? BUG in 7.02?

strange behvaviour in join? BUG in 7.02?

From
Radoslaw Stachowiak
Date:
I have PSQL 7.02

classic join on Two tables:

select l.id from linia l,lk_strefa2linia lk
where l.id = lk.fk_linia and lk.fk_strefa=5;

gives correct linia.ids.

but
select linia.id from linia l,lk_strefa2linia lk
where l.id = lk.fk_linia and lk.fk_strefa=5;

(the only difference is second word: linia.id instead l.id)
will give totaly different results).

tables definitions:

mlotdev=> \d lk_strefa2linia
    Table "lk_strefa2linia"
 Attribute |  Type   | Modifier
-----------+---------+----------
 fk_strefa | integer | not null
 fk_linia  | integer | not null
Index: lk_strefa2linia_ukey

mlotdev=> \d linia
                             Table "linia"
 Attribute |    Type     |                  Modifier
-----------+-------------+---------------------------------------------
 id        | integer     | not null default nextval('seq_linia'::text)
 fk_typ    | integer     | not null
 numer     | char(10)    | not null
 status    | char(1)     | not null default '?'
 stamp     | timestamp   | not null default now()
 opis      | varchar(64) | not null
 skrot     | varchar(16) | not null
Index: linia_pkey


Please CC answer to me. Thanx!

--
radoslaw.stachowiak.........................................http://alter.pl/

Re: strange behvaviour in join? BUG in 7.02?

From
"Oliver Elphick"
Date:
Radoslaw Stachowiak wrote:
  >I have PSQL 7.02
  >
  >classic join on Two tables:
  >
  >select l.id from linia l,lk_strefa2linia lk
  >where l.id = lk.fk_linia and lk.fk_strefa=5;
  >
  >gives correct linia.ids.
  >
  >but
  >select linia.id from linia l,lk_strefa2linia lk
  >where l.id = lk.fk_linia and lk.fk_strefa=5;
  >
  >(the only difference is second word: linia.id instead l.id)
  >will give totaly different results).

You are actually doing a 3-way join, with linia included twice.
It is implicitly included a second time when a column is referenced
from it without the alias.

--
Oliver Elphick                                Oliver.Elphick@lfix.co.uk
Isle of Wight                              http://www.lfix.co.uk/oliver
PGP: 1024R/32B8FAA1: 97 EA 1D 47 72 3F 28 47  6B 7E 39 CC 56 E4 C1 47
GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839  932A 614D 4C34 3E1D 0C1C
                 ========================================
     "But thanks be to God, which giveth us the victory
      through our Lord Jesus Christ."
                              I Corinthians 15:57



Re: strange behvaviour in join? BUG in 7.02?

From
Tom Lane
Date:
"Oliver Elphick" <olly@lfix.co.uk> writes:
> You are actually doing a 3-way join, with linia included twice.
> It is implicitly included a second time when a column is referenced
> from it without the alias.

7.1 will provide a NOTICE that's intended to alert people that such
constructs probably don't do what they're expecting:

regression=# select f.f1, int4_tbl.f1 from int4_tbl f;
NOTICE:  Adding missing FROM-clause entry for table "int4_tbl"

although I wonder whether this will leave the query author any
less confused :-(.

            regards, tom lane