Thread: Incorrect results with NOT IN

Incorrect results with NOT IN

From
Nick
Date:
I have a weird scenario on a table when I run this query...

table1 has 1500 rows
table2 has 1200 rows
table2.id is a foreign key of table1.id

SELECT COUNT(*) FROM table1
WHERE id NOT IN (
  SELECT id FROM table2
);

however, using NOT EXISTS works

SELECT COUNT(*) FROM table1
WHERE NOT EXISTS (
  SELECT id FROM table2 WHERE table1.id = table2.id
);

Can you not use NOT IN over a specific number of values??

Re: Incorrect results with NOT IN

From
"Pavel Stehule"
Date:
2008/8/15 Nick <nboutelier@hotmail.com>:
> I have a weird scenario on a table when I run this query...
>
> table1 has 1500 rows
> table2 has 1200 rows
> table2.id is a foreign key of table1.id
>
> SELECT COUNT(*) FROM table1
> WHERE id NOT IN (
>  SELECT id FROM table2
> );
>
> however, using NOT EXISTS works
>
> SELECT COUNT(*) FROM table1
> WHERE NOT EXISTS (
>  SELECT id FROM table2 WHERE table1.id = table2.id
> );
>
> Can you not use NOT IN over a specific number of values??

yes, NULLs
http://www.depesz.com/index.php/2008/08/13/nulls-vs-not-in/

regards
Pavel Stehule

>
> --
> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general
>

Re: Incorrect results with NOT IN

From
Nick
Date:
Wow, very good to know. That was driving me crazy.