strange behvaviour in join? BUG in 7.02?

Started by Radoslaw Stachowiakover 25 years ago3 messagesgeneral
Jump to latest
#1Radoslaw Stachowiak
radek@alter.pl

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/

#2Oliver Elphick
olly@lfix.co.uk
In reply to: Radoslaw Stachowiak (#1)
Re: strange behvaviour in join? BUG in 7.02?

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

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Oliver Elphick (#2)
Re: strange behvaviour in join? BUG in 7.02?

"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