From: | "scott(dot)marlowe" <scott(dot)marlowe(at)ihs(dot)com> |
---|---|
To: | Edmund Dengler <edmundd(at)eSentire(dot)com> |
Cc: | <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: Type conversions and nulls |
Date: | 2004-05-11 23:16:11 |
Message-ID: | Pine.LNX.4.33.0405111716030.24021-100000@css120.ihs.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
I think coalesce may help you here.
On Tue, 11 May 2004, Edmund Dengler wrote:
> Howdy all!
>
> Just checking on whether this is the expected behaviour. I am transferring
> data from multiple databases to single one, and I want to ensure that I
> only have unique rows for some tables. Unfortunately, some of the rows
> have nulls for various columns, and I want to compare them for exact
> equality.
>
> => create table tmp (
> bigint a,
> bigint b,
> primary key (a, b)
> );
>
> To test for existence, I would naively use:
>
> => select count(1) from tmp
> where a = <value>
> and b = <value>;
>
> What I should use is:
>
> => select count(1) from tmp
> where ((a = <value>) or (a is null and <value> is null))
> and ((b = <value>) or (b is null and <value> is null));
>
> Looking in the manual, I see I can get what I want by running:
>
> => set transform_null_equals to on;
>
> And I can go back to using my naive script and everything works.
>
> However, as <values> are integers, I need to convert them to bigint's so
> that the index can be used (Postgresql 7.4.2 automatic casts, unless this
> has been fixed). So I wrote my script to do the following
>
> => select count(1) from tmp
> where a = <value>::bigint
> and b = <value>::bigint;
>
> And now the nulls don't match! As a further test, I did:
>
> => select null = null, null = null::bigint, null::bigint = null::bigint;
> ?column? | ?column? | ?column?
> ----------+----------+----------
> t | t |
> (1 row)
>
> So, is there a way to do the casts such that this works? Other
> alternatives? I did a search but couldn't find an answer on the archives.
>
> Regards!
> Ed
>
> ---------------------------(end of broadcast)---------------------------
> TIP 9: the planner will ignore your desire to choose an index scan if your
> joining column's datatypes do not match
>
From | Date | Subject | |
---|---|---|---|
Next Message | Edmund Dengler | 2004-05-11 23:29:17 | Re: Type conversions and nulls |
Previous Message | Edmund Dengler | 2004-05-11 22:57:43 | Type conversions and nulls |