RE: [GENERAL][SQL] Getting multiple field unique index to disting uish NULLs.

From: "Jackson, DeJuan" <djackson(at)cpsgroup(dot)com>
To: Stuart Rison <rison(at)biochemistry(dot)ucl(dot)ac(dot)uk>, pgsql-general <pgsql-general(at)postgreSQL(dot)org>, pgsql-sql <pgsql-sql(at)postgreSQL(dot)org>
Subject: RE: [GENERAL][SQL] Getting multiple field unique index to disting uish NULLs.
Date: 1999-09-10 15:44:38
Message-ID: D05EF808F2DFD211AE4A00105AA1B5D251A350@cpsmail
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general pgsql-sql

Use 0 or -1 instead of NULL.
DEJ

> -----Original Message-----
> From: Stuart Rison [SMTP:rison(at)biochemistry(dot)ucl(dot)ac(dot)uk]
> Sent: Friday, September 10, 1999 8:02 AM
> To: pgsql-general; pgsql-sql
> Subject: [GENERAL][SQL] Getting multiple field unique index to
> distinguish NULLs.
>
> Dear All,
>
> Consider the following table:
>
> myscheme_id|level1|level2|level3|level4|function
> -----------+------+------+------+------+-------------------------------
> 11| 4| 5| 1| 3|Long John Silver
> 12| 1242| 3| 44| 5|Metabolism
> 13| 1| 2| 3| 4|Transport
> 1| 1| 4| 3| |Energy
> 9| 1| 2| 3| 1|Signaling
> 3| 1| 2| 3| 2|test1
> 18| 1| 2| | |test2
> 19| 1| 2| | |test3
> 21| 1| 2| | |test4
>
> This is essentially a hierarchical key set-up; each function can be
> identified by a key (which can be thought of as the concatenation of
> level1, level2, level3 and level4).
>
> But you can add a function at any level (i.e. only level1 must be given)
> so:
>
> INSERT INTO myscheme_funcat (level1,function) VALUES (1,'Top level
> function');
>
> is OK.
>
> I am trying to get the database to reject INSERTS for keys already
> occupied
>
> CREATE UNIQUE INDEX myscheme_idx ON myscheme_funcat
> (level1,level2,level3,level4);
>
> The problem is that the indexing considers all NULLs to be distinct thus:
>
> INSERT INTO myscheme_funcat (level1,level2,level3,level4,function) VALUES
> (4,5,76,NULL,'OK');
> INSERT 1044737 1
>
> but so does
> INSERT INTO myscheme_funcat (level1,level2,level3,level4,function) VALUES
>
> (4,5,76,NULL,'Should fail because position 4.5.76 already occupied');
> INSERT 1044738 1
>
> Works because 4,5,76,NULL is considered DISTINCT from 4,5,76,NULL (all
> NULLs are different).
>
> So, any ideas, workarounds etc.??
>
> cheers,
>
> S.
>
> ### Please Note New Details ###
> Stuart C. G. Rison
> Department of Biochemistry and Molecular Biology
> Gower Street, London, WC1E 6BT, United Kingdom
> Tel. 0207 504 2303, Fax. 0207 380 7193
> e-mail: s(dot)rison(at)biochem(dot)ucl(dot)ac(dot)uk
>
>
>
> ************

Browse pgsql-general by date

  From Date Subject
Next Message Mark Jewiss 1999-09-10 15:48:35 CSV File Import
Previous Message Stuart Rison 1999-09-10 15:37:25 Re: [GENERAL][SQL] Getting multiple field unique index to distinguish NULLs.

Browse pgsql-sql by date

  From Date Subject
Next Message Kyle Bateman 1999-09-10 16:01:17 Re: [SQL] Type Conversion: int4 -> Money
Previous Message Stuart Rison 1999-09-10 15:37:25 Re: [GENERAL][SQL] Getting multiple field unique index to distinguish NULLs.