Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Fehlende Sequenzlücken finden mysql

Sie können die fehlenden Zeilen nicht ohne eine Liste aller möglichen numerischen Werte an LEFT JOIN zurückgeben gegen.

Diese Abfrage (die sich anfühlt, als könnte sie besser/stärker/schneller sein, aber sie funktioniert) findet die Lücken:

set @last_prefix = null;
set @last_value = null;
select result from (
    select @last_prefix, @last_value, name,
      @prefix := substring(name,1,3) as prefix,
      @value := substring(name,4) as value,
      case when @prefix = @last_prefix and @value != @last_value +1
        then concat ("gap from ", @prefix, ": ", @last_value+1, " to ", @value-1)
        else "ok" end as result,
      @last_prefix := @prefix, @last_value := @value
      from t20120921
) foo
where result != "ok";