Avatar billede kolme Nybegynder
11. august 2008 - 18:04 Der er 11 kommentarer og
2 løsninger

Find laveste ledige tal

Hej

Jeg har behov for at finde det laveste ledige tal i en tabel. Altså, lad os antage at der er blevet oprettet x-antal autonummerede rækker og én eller flere bliver slettede. Dette giver nogle huller som jeg gerne vil identificerede for at genanvende dette id (Eksemplet er fattigt da jeg ikke kan gøre det med auto-incrementelle nøgler, men håber I forstår pointen).

Kan det gøres med ren SQL?
Avatar billede HenrikSjang Nybegynder
11. august 2008 - 18:15 #1
Hvis det er sql 2005, kan dette muligvis klare det (hvis din id-kolonne starter med 1):

with cte
as
(
select
  row_number() over(order by dinIdKolonne) as rownumber,
  dinIdKolonne
from dinTabel
)

select min(rownumber) as LavesteLedigeId
from cte
where rownumber <> dinIdKolonne
Avatar billede Slettet bruger
11. august 2008 - 18:15 #2
Kun afprøvet i mysql. Hvis du har mange rows, skal du nok lave index på id.

SELECT
    id + 1 AS id
FROM
    table
WHERE
    id + 1 NOT IN (
        SELECT
            id
        FROM
            table
    )
TOP 1

/1
Avatar billede arne_v Ekspert
11. august 2008 - 18:18 #3
SELECT MIN(id)+1 FROM tbl t1 WHERE NOT EXISTS(SELECT * FROM tbl t2 WHERE t2.id=t1.id+1)
Avatar billede teepee Nybegynder
12. august 2008 - 09:22 #4
hvis du får problemer med performance, hvilket nok er sandsynligt ved store datamængder, så foreslår jeg at du opretter en dummy-tabel med en udbrudt talsekvens, og dermed kan du lave en join på din talrække og den udbrudte talrække og let finde det laveste nummer som ikke findes. SQL'en er næsten magen til ovenstående, blot med en anden tabel.
Avatar billede teepee Nybegynder
12. august 2008 - 09:24 #5
Faktisk, nu jeg tænker mig om vil du kunne lave en MINUS join.

select min(tal) from (
  select tal from tkomplet
  minus
  select tal from t1
)
Avatar billede arne_v Ekspert
12. august 2008 - 15:22 #6
Understoetter SQLServer MINUS nu om dage ?

(jeg troede at det var Oracle syntax)
Avatar billede HenrikSjang Nybegynder
12. august 2008 - 19:34 #7
Jeg mener det hedder EXCEPT i sql verdenen, uden dog lige at have testet af.
Avatar billede kolme Nybegynder
12. august 2008 - 20:06 #8
Kan I der har kommet med et fyldestgørende svar ikke smide et svar så I kan få point. Jeg må tilstå at jeg selv kun har tjekket Arnes og den fungerer. Samtidig er det den mest intuitive (for mig ift. mit kendskab til sql), men det er jo subjektivt.

Tak for hjælpen!
Avatar billede HenrikSjang Nybegynder
12. august 2008 - 20:48 #9
Jamen så siger jeg da tak :)
Avatar billede arne_v Ekspert
12. august 2008 - 21:11 #10
.
Avatar billede arne_v Ekspert
30. august 2008 - 02:09 #11
så mangler du bare at acceptere svarene
Avatar billede kolme Nybegynder
30. august 2008 - 09:19 #12
Du har ret. Det er vist ved at være på høje tid! Det ser ikke ud til at kvadratrodenaf1 vil have point.
Avatar billede kolme Nybegynder
30. august 2008 - 09:21 #13
... Eller Teepee for den sags skyld. Tak for hjælpen til jer alle.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester