View Single Post

   
  #4 (permalink)  
Old 06-02-2008, 01:34 PM
Rik Wasmus
 
Posts: n/a
Default Re: What am I missing here?

On Thu, 29 May 2008 20:50:34 +0200, sheldonlg <sheldonlg> wrote:

> I am probably missing something very obvious, but after looking and
> looking I just don't see it.
>
> I have the following query:
>
> SELECT DISTINCT A.AMT, A.CONTRACT
> FROM ATABLE A, BTABLE B, CTABLE C
> WHERE
> ( (B.X = '011170' AND B.Y = A.W)
> OR
> (C.M = A.Z AND C.N = A.T)
> )
> AND A.FYEAR = '2008'
> AND A.FPRNO='3'
>
> This yields an empty set.
> However, if I remove the OR part and just have:
>
> SELECT DISTINCT A.AMT, A.CONTRACT
> FROM ATABLE A, BTABLE B
> WHERE
> ( (B.X = '011170' AND B.Y = A.W)
> )
> AND A.FYEAR = '2008'
> AND A.FPRNO='3'
>
> Then it returns data.
>
> Since (B.X = '011170' AND B.Y = A.W) is true and
> (C.M = A.Z AND C.N = A.T) is false, shouldn't the compound statement in
> the parenthesis in the first one, separated by an OR, yields true, and
> so should yield data? It is acting as if (true or false) ===> false
> rather than true.


Implicit joins are just evil. If you write it out usign explicit joins,
your problem becomes clear. 'comma'-joins should be avoided at all costs..
--
Rik Wasmus
....spamrun finished
Reply With Quote