Re: What's wrong with this query?

From: Steve Atkins <steve(at)blighty(dot)com>
To: pgsql-general List <pgsql-general(at)postgresql(dot)org>
Subject: Re: What's wrong with this query?
Date: 2009-06-21 22:42:30
Message-ID: 9B56B4DB-13CB-4072-9C72-555D44AF5EEA@blighty.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general


On Jun 21, 2009, at 3:37 PM, Thomas Kellerer wrote:

> Mike Christensen wrote on 22.06.2009 00:10:
>> I just tracked down a bug in my software due to an "unexpected"
>> behavior in Postgres.. Can someone clarify why this doesn't work
>> (I haven't tried it on MSSQL or anything else, so I'm not sure if
>> this is the official SQL standard or anything)..
>> CREATE TABLE test
>> (
>> value uuid
>> );
>> INSERT INTO test VALUES ('00000000-0000-0000-0000-000000000000');
>> INSERT INTO test VALUES ('11111111-1111-1111-1111-111111111111');
>> INSERT INTO test VALUES (null);
>> select * from test where value !=
>> '00000000-0000-0000-0000-000000000000';
>> What I expect to get is two rows: the
>> '11111111-1111-1111-1111-111111111111' row and the null row, as
>> both those values are in fact not
>> '00000000-0000-0000-0000-000000000000'. However, I only get the
>> first one.
> That is standard behaviour.
> A comparison with a NULL value always returns false (and that is not
> a Postgres speciality).
>
> You need to use
>
> select *
> from test
> where value != '00000000-0000-0000-0000-000000000000'
> or value is null;

Yup.

Or where value is distinct from '00000000-0000-0000-0000-000000000000';

Cheers,
Steve

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Craig Ringer 2009-06-21 23:26:56 Re: cursors, temp tables, dynamic sql technique (was and is: looping over a small record set over and over in a function)
Previous Message Thomas Kellerer 2009-06-21 22:37:41 Re: What's wrong with this query?