![]() |
|
|
#1 |
|
Faccio piaceri a Limps
![]() ![]() ![]() ![]() ![]() ![]() Data Iscrizione: 03-08-2002
Età: 22
Messaggi: 12.310
Potenza rep: 54
![]() |
[SQL] Numero non conseguente
diciamo ke io ho una tabella col campo IDNOME coi seguenti valori
1 2 4 5 6 io vorrei una query SQL ke mi faccia uscire il numero 3 ( visto ke manca dall'elenco quindi è un "buco") e se nn ci sta nessun "buco" mi metta il numero 7 p.s. scusate il mio linguaggio, ma fa caldo e sto a magnare/bere pringles e birra ![]()
__________________
|
|
|
|
|
|
#2 |
|
masini addicted
![]() ![]() ![]() Data Iscrizione: 24-08-2004
Residenza: Milano
Età: 24
Messaggi: 3.485
Potenza rep: 20
![]() |
premesso che mi puzza di stronzata
e che mi piacerebbe sapere il motivo per cui non devi avere buchi visto che e' solo un id ed e' sempre pericoloso riutilizzarne uno vecchio, la prima cosa che mi viene in mente e'Codice:
SELECT MIN(p.idnome+1)
FROM tabella p
WHERE NOT EXISTS(SELECT 1
FROM tabella c
WHERE c.idnome=p.idnome+1)
__________________
|
|
|
|
|
|
#5 |
|
masini addicted
![]() ![]() ![]() Data Iscrizione: 24-08-2004
Residenza: Milano
Età: 24
Messaggi: 3.485
Potenza rep: 20
![]() |
con questa query si risolve anche il problema quando mancano i primi id (si suppone che gli id partano da 1):
Codice:
SELECT MIN(temp.id)
FROM(
SELECT p.idnome+1 id
FROM tabella p
WHERE NOT EXISTS(SELECT 1
FROM tabella c
WHERE c.idnome=p.idnome+1)
UNION ALL
SELECT MIN(p.idnome-1) id
FROM tabella p
WHERE p.idnome > 1
AND NOT EXISTS(SELECT 1
FROM tabella c
WHERE c.idnome=p.idnome-1)
) temp
![]()
__________________
|
|
|
|
|
|
#6 |
|
Re di WE
![]() ![]() ![]() ![]() ![]() Data Iscrizione: 01-01-1970
Messaggi: 10.571
Potenza rep: 0
![]() |
Non c'è un solo motivo valido per cui tu debba dover usare un ID già usato. E' ovvio che l'ID mancante è una cancellazione del record, la cosa migliore sarebbe quella di usare un campo "DELETED" da usare come indicatore di record cancellato ed escluderlo da tutte le eventuali query con un "where deleted is not true".
Riassegnare un ID rischi che se per caso in un'altra tabella hai dimenticato un record associato al vecchio ID questo verrà riassociato al nuovo. |
|
|
|
|
|
#7 |
|
Faccio piaceri a Limps
![]() ![]() ![]() ![]() ![]() ![]() Data Iscrizione: 03-08-2002
Età: 22
Messaggi: 12.310
Potenza rep: 54
![]() |
allora io sto "lavorando" su un DB del '99 fatto da un ingegnere con la 5a elementare e ke ha usato il tipo NUMERICO anzikè CONTATORE per l'id (genio!)
![]() 1) il DB nn si puo modificare ...... indi so cazzi ; (quindi niente cosa DELETED )2) il suo programma del cazzo gia mi occupato tutti i valori ( fino a 65555 ) quindi gli altri stanno tutti sopra; 2) felice .... è quello il mio problema .... mi deve dare 1 non 2 ![]() nome tabella: NOMI campo: IDNOMI ci sto smadornando da 3 ore ![]()
__________________
|
|
|
|
|
|
#8 | |
|
masini addicted
![]() ![]() ![]() Data Iscrizione: 24-08-2004
Residenza: Milano
Età: 24
Messaggi: 3.485
Potenza rep: 20
![]() |
Cita:
] e li hai finiti) allora stai solo ritardando la fine...migra le tabelle su altre fatte un po' meglio.In ogni caso quella query ti da 2 se mancano 1 e 2, ma la volta successiva ti da 1. Qual e' il problema se usi prima il 2 e poi l'1? Se proprio ti da fastidio, metti l'1 a mano e gli altri funzioneranno per sempre ![]()
__________________
Ultima Modifica di Felice R. : 04-08-2008 alle 03:20. |
|
|
|
|
|
|
#9 |
|
Re di WE
![]() ![]() ![]() ![]() ![]() Data Iscrizione: 01-01-1970
Messaggi: 10.571
Potenza rep: 0
![]() |
Appunto, tu devi riempire i buchi, lo script di Felice ti darà 2 come primo disponibile ma la volta successiva troverà 1 come primo disponibile e hai risolto, dubito che ti freghi molto se popola prima 2 di 1
|
|
|
|
|
|
#10 |
|
:distributoreDtormentoni:
![]() ![]() ![]() ![]() ![]() ![]() Data Iscrizione: 07-01-2003
Residenza: Parma
Età: 42
Messaggi: 13.948
Potenza rep: 58
![]() |
Ma soprattutto gege vaffanculo!
![]()
__________________
![]() |
|
|
|
![]() |
| Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 membri e 1 ospiti) | |
| Strumenti discussione | |
| Modalità di visualizzazione | |
|
|