Angenommen, ich habe 3 Spalten in einer Tabelle - A, B und C. Ich möchte sicherstellen, dass, wenn ich einen Wert (sagen x) in eine Spalte A einfügen, kann ich nicht einfügen ein Tupel, das entweder B oder C gleich x hat, dh der Wert x sollte für alle Tupel eindeutig für die Spalte A bleiben.SQL Oracle Constraint Wert eindeutig unter mehreren Spalten
Beachten Sie, dass x in A für ein anderes Tupel wiederholt werden kann.
Ich kenne die UNIQUE-Klausel in SQL, aber das ist nur um sicherzustellen, dass ein Wert in einer bestimmten Spalte nur einmal auftritt. Da CHECK-Anweisungen in Oracle keine Unterabfragen zulassen, kann ich nicht herausfinden, wie dies implementiert wird.
EDIT (mehr Info hinzufügen)
Primärschlüssel Employee_Number ist, während die 3 Spalten in Frage sind LandlineNo, MobileNo und VOIP. So nehme an, das ein Eintrag wurde:
Employee_Number = 1, LandlineNo = x, MobileNo = y, VOIP = z
Dann ist dieser Eintrag für ein zweites Tupel würde nicht erlaubt sein -
Employee_Number = 2, LandlineNo = a, MobileNo = x, VOIP = c
Auf der anderen Seite, dieser wäre gut (ja, 2 Angestellte kann die haben gleiche Anzahl der gleichen Art)
Employee_Number = 2, LandlineNo = x, MobileNo = b, VOIP = c
Können Sie Ihre Frage mit einem Beispiel für gute und schlechte Zeilen erweitern? Was ist die Struktur und der Primärschlüssel der Tabelle? –
Sind Sie mit diesem Tischdesign festgefahren? Sie verlangen, dass jede Nummer von einem bestimmten Typ ist. Warum also nicht eine Tabelle "Zahlen" haben, primay Schlüssel ist die Zahl (oder eine ID plus eine eindeutige Beschränkung auf die Zahlen, wenn Sie das bevorzugen) und dann haben Sie einen Spaltentyp. Somit ist jede Nummer einzigartig und hat einen Typ. Dann haben Sie in Ihrer Angestelltentabelle nur drei Fremdschlüssel für diese Nummerentabelle (d. H. Drei Zahlen oder drei IDs). –
welche Version von Oracle verwenden Sie? – Sebas