RE: [SQL] Beginner question - select with multiple tables - Mailing list pgsql-sql

From Jackson, DeJuan
Subject RE: [SQL] Beginner question - select with multiple tables
Date
Msg-id F10BB1FAF801D111829B0060971D839F5F8072@cpsmail
Whole thread Raw
List pgsql-sql
> > 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

What you most likely want:
select vall.node, vall_bod1.bod1
  from vall, vall_bod1
 where vall.node = vall_bod1.node and vall_bod1.bod1 LIKE '%brake%'
UNION
select vall.node, vall_bod2.bod2
  from vall, vall_bod2
 where vall.node = vall_bod2.node and vall_bod2.bod2 LIKE '%brake%';

If you are sure there won't be duplicate information in bod1 or bod2
then Make it UNION ALL (quicker).

Hope this helps,
    DEJ

pgsql-sql by date:

Previous
From: Yuri Yurchenko
Date:
Subject: Text type function
Next
From: "Frank Morton"
Date:
Subject: Faster LIKE