2016-04-02 2 views
2

Kurze Erklärung: ich habe tabelle1 mit Spalten employee_id, Monat, amount_spentWie kann man einen Eintrag der Spalte 1 davon abhalten, doppelte Einträge in Spalte 2 (postgresql) zu haben?

Mitarbeiter sollte für einen Monat nur einen Eintrag haben

employee_id month  amount_spent 
E-124  JANUARY 200$ 
E-124  MARCH  14$ 
E-78   JANUARY 56$ 

Ich möchte einen Eintrag von (E-124, Januar beschränken , 14 $), da E-124 bereits seine Ausgaben für den Monat Januar eingereicht hat.

+2

Ein einfacher 'UNIQUE' Index auf employee_id und Monat sollte es tun ...? –

+1

CONSTRAINT emp_id_month EINZIGARTIG (employee_id_id, monate) wird es funktionieren? kann E-124 einen Datensatz für jeden Monat außer JANUAR und März eingeben – Hardy

+0

@Hardy: Ja, so funktioniert ein eindeutiger Index. Probieren Sie es einfach aus. –

Antwort

0

Sie sollten die Bedingung "AUSSCHLUSS" anwenden.

Definition:

  • Ausschlussbeschränkungen sicherzustellen, dass wenn zwei Reihen auf den angegebenen Spalten oder Ausdrücke verglichen werden, um die angegebenen Operatoren, mindestens eines dieser Operator Vergleiche falsch oder null zurück.

Beispiel:

CREATE TABLE COMPANY7(
    employee_id INT NOT NULL, 
    month   CHAR(10), 
    amount_spent REAL, 
    EXCLUDE USING gist 
    (employee_id WITH =, 
    month WITH <>) 
); 

Hoffentlich wird es Ihnen helfen. :)

+0

Ein eindeutiger Index ist genug, keine Notwendigkeit für eine Ausschlussbeschränkung (gewährt: eine eindeutige Einschränkung ist nur ein Sonderfall einer Ausschlussbeschränkung, aber immer noch) –

Verwandte Themen