Supponiamo che io sono 3 colonne di una tabella - A, B e C. I vogliono assicurarsi che se inserisco un certo valore (ad esempio x) in una colonna A, non riesco a inserire una tupla che ha B o C uguale a x, cioè il valore x deve rimanere unico per la colonna A per tutte le tuple.SQL Oracle valore vincolo univoco tra più colonne
Nota che x può essere ripetuto in A per qualche altro tupla.
Sono consapevole della clausola UNIQUE in SQL, ma che è solo per garantire che un valore si verifica in una determinata colonna solo una volta. Poiché le istruzioni CHECK in Oracle non consentono le sottoquery, non riesco a capire come implementarlo.
EDIT (per aggiungere ulteriori informazioni)
chiave primaria è Employee_Number, mentre le 3 colonne in questione sono LandlineNo, MobileNo e VOIP. Così supponiamo che questo è stato una voce:
Employee_Number = 1, LandlineNo = x, MobileNo = y, VOIP = z
Poi questa voce per un altro tuple non sarebbe consentito -
Employee_Number = 2, LandlineNo = a, MobileNo = x, VOIP = c
D'altra parte, questo sarebbe bene (sì, 2 dipendenti possono avere la stesso numero dello stesso tipo)
Employee_Number = 2, LandlineNo = x, MobileNo = b, VOIP = c
Si può espandere la vostra domanda con un esempio di righe buoni e cattivi? Qual è la struttura e la chiave primaria del tavolo? –
Sei bloccato con questo design del tavolo? Quello che stai chiedendo è che ogni numero garantisca di essere di un certo tipo. Quindi, perché non avere una tabella "numeri", la chiave primaria è il numero (o un ID più un vincolo univoco sui numeri se preferisci) e poi hai un tipo di colonna. Quindi ogni numero è unico e ha un solo tipo. Quindi nella tabella dei dipendenti hai solo tre chiavi esterne per quella tabella numerica (vale a dire tre numeri o tre ID). –
quale versione di Oracle stai usando? – Sebas