Mehrfache Einträge löschen

Hallo,

ich habe folgendes Problem:

Am besten ich fange mit einer kleine Skizze der Tabelle an.


Spalte 1--------Spalte 2
a---------------küche
a---------------da wo man essen macht
a---------------da wo man kocht
b---------------wohnzimmer
c---------------schlafzimmer
c---------------bedroom
d---------------auto
d---------------car
d---------------tut tut
d---------------dreckschleuder


Währen in Spalte a ein kürzel steht, welches mehrmals vorkommen kann,
steht in Spalte b hierzu immer ein langtext.

Nun möchte ich aber immer nur einen langtext zu einem kürzel haben.
Es soll also jedes Kürzel immer nur einmal vorkommen
und zwar immer das erste,

am ende soll die Tabelle so aussehen.


a-------------küche
b-------------wohnzimmer
c-------------schlafzimmer
d-------------auto

Was ist nun die Frage?

Um Dein Ziel zu erreichen, wurde UNIQUE INDEXE erfunden. Um eine bereits versaute Tabelle zu bereinigen, mußt man halt die falschen löschen, z.B. so:

test=# create table versaut (id text, lang text);
CREATE TABLE
test=*# copy versaut from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> a    bla
>> a    foo
>> a    blub
>> b    bar
>> c    foobar
>> \.
test=*# delete from versaut where (id,lang) not in (select distinct on (id) id, lang from versaut order by id, lang);
DELETE 2
test=*# select * from versaut ;
 id |  lang
----+--------
 a  | bla
 b  | bar
 c  | foobar
(3 rows)

Und nicht vergessen:

test=*# create UNIQUE INDEX idx_versaut on versaut(id);
CREATE INDEX

Damit:

test=*# insert into versaut values ('a','foo');
ERROR:  duplicate key violates unique constraint "idx_versaut"

deine Tabelle nicht gleich wieder versaut wird…


Andreas