Re: Strange query problem...

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 2009-01-28 at 12:38 -0600, Scott Whitney wrote:
> Wow. This just boggles my mind, but there it is.  Here's Oracle:
> 

This looks like a NULL vs '' issue. Am I wrong?

Joshua D. Drake


> SQL> select i from a1;
> 
> I
> --------------------
> one
> two
> three
> four
> five
> 
> SQL> select i from a2;
> 
> I
> --------------------
> 
> two
> four
> 
> SQL> select i from a1 where i not in (select i from a2);
> 
> no rows selected
> 
> Or, if you want the exact test:
> 
> SQL>  select * from a1 where i not in (select i from a2);
> 
> no rows selected
> 
> SQL> select * from a1 where i not in (select coalesce(i,'')
>   2  from a2);
> 
> no rows selected
> 
>  
> 
> -----Original Message-----
> From: Hoover, Jeffrey [mailto:jhoover@xxxxxxxx] 
> Sent: Wednesday, January 28, 2009 12:31 PM
> To: Scott Whitney; Kevin Grittner; pgsql-admin@xxxxxxxxxxxxxx
> Subject: RE:  Strange query problem...
> 
> How do other databases handle this?  I tried it in SQLite and I get
> different behavior (see below).  Can someone try it in Oracle? In MySQL?
> In Sybase? If postgres is alone in this interpretation would the
> community consider revising the postgres interpretation?
> 
> sqlite> select * from a1;
> one
> three
> five
> two
> four
> 
> sqlite> select * from a2;
> 2|two
> 4|four
> 0|
> 
> sqlite>  select * from a1 where i not in (select i from a2);
> one
> three
> five
> sqlite>
> 
> -----Original Message-----
> From: Scott Whitney [mailto:swhitney@xxxxxxxxxxx] 
> Sent: Wednesday, January 28, 2009 1:22 PM
> To: Hoover, Jeffrey; 'Kevin Grittner'; pgsql-admin@xxxxxxxxxxxxxx
> Subject: RE:  Strange query problem...
> 
> So, you're sayin' I ain't crazy? :) 
> 
> -----Original Message-----
> From: Hoover, Jeffrey [mailto:jhoover@xxxxxxxx] 
> Sent: Wednesday, January 28, 2009 12:18 PM
> To: Kevin Grittner; Scott Whitney; pgsql-admin@xxxxxxxxxxxxxx
> Subject: RE:  Strange query problem...
> 
> Wow! I would never have expected that behavior, but heres the proof:
> 
> cameradb_dev=# select * from a1;
>    i
> -------
>  one
>  three
>  five
>  two
>  four
> (5 rows)
> 
> cameradb_dev=# select * from a2;
>  j |  i
> ---+------
>  0 | 
>  2 | two
>  4 | four
>  (3 rows)
> 
> cameradb_dev=# select * from a1 where i not in (select i from a2);
>  i
> ---
> (0 rows)
> 
> cameradb_dev=# select * from a1 where i not in (select coalesce(i,'')
> from a2);
>    i
> -------
>  one
>  three
>  five
> (3 rows)
> 
> cameradb_dev=#
> 
> -----Original Message-----
> From: pgsql-admin-owner@xxxxxxxxxxxxxx
> [mailto:pgsql-admin-owner@xxxxxxxxxxxxxx] On Behalf Of Kevin Grittner
> Sent: Wednesday, January 28, 2009 1:05 PM
> To: Scott Whitney; pgsql-admin@xxxxxxxxxxxxxx
> Subject: Re:  Strange query problem...
> 
> >>> "Scott Whitney" <swhitney@xxxxxxxxxxx> wrote: 
> > Um. How is this possible?
>  
> > mydb=# select * from time_recs where id_time_rec not in (select
> > id_time_rec from punch_time_recs);
>  
> > (0 rows)
>  
> >                        Table "public.punch_time_recs"
> >       Column       |          Type          |           Modifiers    
>      
> >
> -------------------+------------------------+---------------------------
> ----
>  
> >  id_time_rec       | character varying(38)  | 
>  
> The column in punch_time_recs is null capable.  Try using NOT EXISTS.
>  
> The SQL spec requires the NOT IN to be the equivalent of a "not
> equals" test for all entries, and you can't say that any given value
> is not equal to NULL, since NULL can mean that there is a value but
> you don't know it.  The semantics of NOT EXISTS are subtly different
> here -- it means there aren't any rows known to have the value.
>  
> -Kevin
> 
> -- 
> Sent via pgsql-admin mailing list (pgsql-admin@xxxxxxxxxxxxxx)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-admin
> 
> 
> 
-- 
PostgreSQL - XMPP: jdrake@xxxxxxxxxxxxxxxxxxxxx
   Consulting, Development, Support, Training
   503-667-4564 - http://www.commandprompt.com/
   The PostgreSQL Company, serving since 1997


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

[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux