Thread: Beginner question - select with multiple tables

Beginner question - select with multiple tables

From
Dave Inskeep
Date:
Hi,

I'm trying to perform a select over several tables I've created. There
are five tables - the first contains message header information and a
key field (called node). The other four contain message body
information and the same node field. I'm getting unexpected results
when I query across the multiple tables.

The following statement does not work if there are not any records in
vall_bod2:

select distinct vall.node from vall, vall_bod1, vall_bod2 where
( vall.node = vall_bod1.node and vall_bod1.bod1 LIKE '%brake%' ) or
( vall.node = vall_bod2.node and vall_bod2.bod2 LIKE '%brake%' );

However, if I insert a record into vall_bod2 (whether or not it
contains the word brake) and a corresponding header record into vall
with a matching node, the same exact query will return the nodes of
all records in vall_bod1 with the word 'brake' in the bod1 field.

The same holds true if I query across vall_bod1, 2, and 3, and there
are no records in vall_bod3. If I insert a single record in vall_bod3,
even if it doesn't match, the query will work for matching records in
vall_bod1 and vall_bod2. Ditto when I try across 1-4.

Can someone explain why this happens, am I doing something wrong? Is
there a better way to achieve the same results, i.e. JOINS? Does
Postgresql support JOINS?

Many thanks,
Dave Inskeep






_________________________________________________________
DO YOU YAHOO!?
Get your free @yahoo.com address at http://mail.yahoo.com


Re: [SQL] Beginner question - select with multiple tables

From
Herouth Maoz
Date:
At 6:51 +0200 on 20/1/99, Dave Inskeep wrote:


>
> select distinct vall.node from vall, vall_bod1, vall_bod2 where
> ( vall.node = vall_bod1.node and vall_bod1.bod1 LIKE '%brake%' ) or
> ( vall.node = vall_bod2.node and vall_bod2.bod2 LIKE '%brake%' );
>
> However, if I insert a record into vall_bod2 (whether or not it
> contains the word brake) and a corresponding header record into vall
> with a matching node, the same exact query will return the nodes of
> all records in vall_bod1 with the word 'brake' in the bod1 field.
>
> The same holds true if I query across vall_bod1, 2, and 3, and there
> are no records in vall_bod3. If I insert a single record in vall_bod3,
> even if it doesn't match, the query will work for matching records in
> vall_bod1 and vall_bod2. Ditto when I try across 1-4.
>
> Can someone explain why this happens, am I doing something wrong? Is
> there a better way to achieve the same results, i.e. JOINS? Does
> Postgresql support JOINS?

First, you *are* doing a join here.

But you are missing the logic. Perhaps you should tell us, instead of what
query you did (which obviously returns the correct results by your
description), what was the result you wanted? What rows did you want to be
returned?

Herouth

--
Herouth Maoz, Internet developer.
Open University of Israel - Telem project
http://telem.openu.ac.il/~herutma