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.
Io farei cosi:

__________________________________________

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"
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
Hai ottenuto con certezza al campo "Cont"
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

.