I am having an issue in extracting data using data of two tables in SQL.
x
select A, B, C, D
from Table_one T1
where A in (select T2.A from Table_two T2
where T2.E <> 'ZZZ');
This returns A, B, C, D where E in T2 is not ZZZ. However, when I add another where clause like below, it returns data where T2 is ZZZ also.
select A, B, C, D
from Table_one T1
where A in (select T2.A from Table_two T2
where T2.E <> 'ZZZ')
and D <> 0 ;
This ignores “T2.E <> ‘ZZZ'” part, but “D<>0” is not ignored. Why is this happening?
Advertisement
Answer
Because you have duplicates in Table_two
. For some of those duplicates, one has the value of ZZZ
and the other does not.
You are using the wrong logic if you want to exclude rows that have a ZZZ
in table_two
. I would recommend NOT EXISTS
:
select A, B, C, D
from Table_one T1
where not exists (select 1
from Table_two T2
where T1.A = T2.A and
T2.E = 'ZZZ'
) and
D <> 0 ;