Unique Index über 3 Spalten

Hallo,
Hab eine Frage zu unique index.
Und zwar habe ich eine Tabelle mit 3 Spalten.
Diese 3 Spalten sind mit sehr vielen Werten, sagen wir alle 3 Spalten sind integer.
Es kann sein, dass doppelte Werte vorkommen.
Jetzt möchte ich einen create unique index über alle 3 Spalten machen, dabei heraus bekommen, wo in der jeweiligen Spalte die Werte doppelt sind und außerdem die doppelten Werte noch löschen.

Mein Ansatz bis jetzt:
CREATE TABLE products (
product_no integer,
name_no integer,
price integer
);
INSERT INTO products (product_no, name_no, price) VALUES
(1, 3, 99),
(2, 5, 199),
(3, 6, 299),
(3, 3, 1);
select * from products;
CREATE INDEX index_name on products(product_no);
Bis hier funktioniert es noch, aber sobald ich die Abfrage über alle 3 Spalten mache, bekomme ich keine Fehlermeldung mehr. :confused:
Leider habe ich wenig Erfahrung :frowning: und komme nicht weiter.

Ich freue mich über jede Antwort, und hoffe ihr könnt mir helfen :slight_smile:

MfG
xandl

Du bekommst keine Fehlermeldung? Sei doch froh!

Also, was genau willst Du? Wenn je Spalte ein Wert nur unique sein kann, dann 3 Unique-Indexe, je einen pro Spalte. Wenn die Kombination über alle 3 Spalten unique sein soll, dann einen unique Index über alle 3 Spalten.

Du kannst solche einen Index erst anlegen, wenn die bedingung erfüllt ist. Derzeit wäre ein unique Index über die erste und über die zweite Spalte nicht möglich, nur über die dritte sowie über alle.

Sorry mein Fehler, der Code oben ist nicht 100% richtig.
Wenn ich
CREATE UNIQUE INDEX index_name on products(product_no);
mache bekomme ich
ERROR: could not create unique index “index_name” Detail: Key (product_no)=(3) is duplicated.: CREATE UNIQUE INDEX index_name on products(product_no)
zurück und das ist für mich in Ordnung.
Aber wenn ich jetzt
CREATE UNIQUE INDEX index_name on products(product_no, name_no);
über 2 Spalten mache, bekomme ich keine Fehlermeldung zurück.
Ich erwarte mir aber auch einen Error, weil ‘3’ ja duplicated ist oder habe ich einen denkfehler?

Ja, hast Du.

(3,6) != (3,3)