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
.