Vinzenz Mai: mysql query gesucht

Beitrag lesen

Hallo Ilja,

erwähnen sollte man eventuell auch, dass wenn es keine datensätze in der ergebnismenge gibt, dass dann der kleinste freie wert die unter grenze ist.

das ist der eine Sonderfall: noch gar keine Datensätze im Intervall vorhanden.
Es gibt noch einen zweiten Sonderfall: keine freie Zahl im Intervall vorhanden.

Wäre es nicht übersichtlicher, dies mit CASE zu lösen? Etwa in der Art:

SELECT  
    CASE  
    -- Intervall ist noch ganz frei  
    WHEN (SELECT  
              COUNT(DISTINCT spalte)  
          FROM  
              tabelle  
          WHERE  
              spalte BETWEEN <anfang> AND <ende>) = 0 THEN <anfang>  
    -- Intervall komplett belegt  
    WHEN (SELECT  
              COUNT(DISTINCT spalte)  
          FROM  
              tabelle  
          WHERE  
              spalte BETWEEN <anfang> AND <ende>) = (1 + <ende> - <anfang>) THEN NULL  
    -- sonst Dein Vorschlag  
    ELSE  
        ....  
    END

Die Filterung auf reine Zahlenwerte hab' ich wie Du vorhin ausgelassen. Für den Fall, dass kein Wert frei ist, gäbe ich NULL zurück - und baute aus dem ganzen gleich eine gespeicherte Funktion, die einen skalaren Wert zurückgibt :-)

Freundliche Grüße

Vinzenz