Io farei cosi:Originariamente inviato da M.Solazzi
In un DB ho un campo INTEGER che é il "numero di pratica",
é un numero che si inserisce manualmente e non é relazionato con l'ID (chiave primaria)
in pratic aogni volta che si inserisce una nuova pratica si mette il numero di pratica (per esempio 100).
Ho la necessitá di tirare fuori dal DB tutti i numeri di pratica che mancano nel DB ossia che sono stati cancellati o se sono stati saltati per errore.
Per esempio se in un DB ci sono 4 record con "numero pratica" 1-2-3-5 la query mi dovrebbe tirare fuori il 4 ossia il numero di pratica che é stato saltato.
__________________________________________
Immaginiamo che la tua tabella si chiama "Pratiche"
con i campi "IDPr" e "NuPr" ( Numero di pratica )
__________________________________________
Disponi nel DB di una seconda tabella QUALUNQUE
che abbia un numero di record CERTAMENTE superiore
al massimo valore di "NuPr" nella tabella "Pratiche"
Immaginiamo si chiami "Tab"
con i campi "ID" ( Key ) ..... eccetera
__________________________________________
Crei una vista di nome "V1" sulla tabella "Tab"
Hai ottenuto con certezza al campo "Cont"codice:SELECT TabA.ID, Count(TabB.ID) AS Cont FROM Tab AS TabA LEFT JOIN Tab AS TabB ON TabA.ID >= TabB.ID GROUP BY TabA.ID
tutti i numeri da 1 a n
( Dove n è superiore al max di "NuPr" )
_______________________________________
Crei una ulteriore vista fra la tabella "Pratiche"
e la vista "V1"
codice:SELECT V1.Cont FROM V1 LEFT JOIN Pratiche ON V1.Cont = Pratiche.NuPr WHERE ( ((V1.Cont)<=(SELECT Max(Pratiche.NuPr) FROM Pratiche)) AND ((Pratiche.NuPr) Is Null) )
e hai ottenuto il tuo risultato
____________________________________
Un po macchinoso ma non mi viene
in mente nulla di meglio
Facci sapere
.

Rispondi quotando