Załóżmy, że mam 3 kolumny w tabeli - A, B i C. Chcę się upewnić, że jeśli wstawię pewną wartość (np. X) do kolumny A, nie mogę wstawić krotkę, która ma B lub C równe x, tj. wartość x powinna pozostać unikalna dla kolumny A dla wszystkich krotek.Niepowodzenie SQL Oracle unikatowe wśród wielu kolumn
Należy zauważyć, że x można powtórzyć w A dla innej krotki.
Jestem świadomy klauzuli UNIQUE w SQL, ale to tylko w celu zapewnienia, że wartość występuje w danej kolumnie tylko raz. Ponieważ instrukcje CHECK w Oracle nie zezwalają na podzapytanie, nie mogę wymyślić, jak to zaimplementować.
EDIT (aby dodać więcej informacji)
Klucz podstawowy jest Employee_Number, natomiast 3 kolumny w pytaniu są LandlineNo, MobileNo i VoIP. Zatem załóżmy, był to jeden wpis:
Employee_Number = 1, LandlineNo = x, MobileNo = y, VOIP = z
Wtedy ten wpis na kolejny krotki byłoby nie wolno -
Employee_Number = 2, LandlineNo = a, MobileNo = x, VOIP = c
Z drugiej strony, ten będzie w porządku (tak, 2 pracowników może mieć samą ilość tego samego rodzaju)
Employee_Number = 2, LandlineNo = x, MobileNo = b, VOIP = c
można rozszerzyć swoje pytanie na przykładzie dobrych i złych wierszy? Jaka jest struktura i klucz podstawowy tabeli? –
Czy utknąłeś przy tym projekcie stołu? To, o co prosisz, to posiadanie każdego numeru gwarantowanego określonego rodzaju. Dlaczego więc nie mieć tabeli "liczby", kluczem pierwszorzędnym jest liczba (lub identyfikator plus unikalne ograniczenie na liczbach, jeśli wolisz), a następnie masz typ kolumny. Każda liczba jest niepowtarzalna i ma jeden typ. Następnie w tabeli pracowników masz tylko trzy obce klucze do tej tabeli numerów (tj. Trzy liczby lub trzy identyfikatory). –
której wersji Oracle używasz? – Sebas