Weird behaviour on a join with multiple keys

From: Charlie Clark <charlie(at)begeistert(dot)org>
To: pgsql-general(at)postgresql(dot)org
Subject: Weird behaviour on a join with multiple keys
Date: 2007-03-08 22:09:43
Message-ID: EBF29926-4D5E-4713-887A-713CB23F58B1@begeistert.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi,

I'm getting unexpected results on a query which involves joining two
tables on two common variables (firstname and lastname).

This is the basic query:

SELECT table1.lastname, table1.firstname
FROM table1
INNER JOIN table2 ON
(table2.name = table1.name
AND
table2.vorname = table1.vorname)

This is returning many rows fewer than I expect and is ignoring a lot
where table1.firstname = table2.firstname AND table1.lastname =
table2.lastname. In fact when I extend the query by a WHERE clause
such as WHERE table1.lastname IS LIKE 'Sch%' I get results which are
not returned by the original query.

I'm not very au fait with the inner workings of PostgreSQL but
EXPLAIN does not seem, to me at least, to provide an explanation for
the missing results.

"Merge Join (cost=1987.97..2121.24 rows=34 width=22)"
" Merge Cond: (("outer"."?column3?" = "inner"."?column3?") AND
("outer"."?column4?" = "inner"."?column4?"))"
" -> Sort (cost=364.97..375.99 rows=4409 width=22)"
" Sort Key: (table1.lastname)::text, (table1.firstname)::text"
" -> Seq Scan on table1 (cost=0.00..98.09 rows=4409 width=22)"
" -> Sort (cost=1623.00..1667.00 rows=17599 width=21)"
" Sort Key: (table2.lastname)::text, (table2.firstname)::text"
" -> Seq Scan on table2 (cost=0.00..381.99 rows=17599 width=21)"

Am I missing something big and obvious here?

Charlie
--
Charlie Clark
Helmholtzstr. 20
Düsseldorf
D- 40215
Tel: +49-211-938-5360
GSM: +49-178-782-6226

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Alvaro Herrera 2007-03-08 22:10:47 Re: Setting week starting day (was: Re: Tabulate data incrementally)
Previous Message Devrim GÜNDÜZ 2007-03-08 22:05:19 Re: "oracle to postgresql" conversion