2016-02-22 2 views
0

У меня есть таблица в SQLite с именем UserAccessLevels, а имя столбца первичного ключа - No. Последовательность первичного ключа 0,1,3,4 в первичном ключе 2 отсутствует. Возможно ли найти этот нерегулярный первичный ключ 2, выполнив любой запрос в базе данных SQLite.Можно ли определить неравномерность в первичном ключе базы данных SQLite

+2

Наверное, нет. Большинство баз данных, в которых используется любое автозапуск, будут пропускать номера из-за откатов или запись может быть удалена. НИКОГДА не предполагайте, что в нумерации таблицы базы данных не будет пробелов. – HLGEM

+0

@HLGEM О, спасибо .......... :) –

+2

Возможно ли найти недостающее значение? Да. Это необходимо? Нет. Не беспокойтесь. Требование *** *** только для (сгенерированного) первичного ключа заключается в том, что оно уникально. Это не имеет значения, если у вас есть пробел в цифрах или нет. –

ответ

2

Это может быть сделано с correlated subquery, чтобы проверить наличие соответствующего следующего ряда (со специальным случае последней строки):

SELECT No + 1 
FROM UserAccessLevels 
WHERE NOT EXISTS (SELECT 1 
        FROM UserAccessLevels AS T2 
        WHERE T2.No = UserAccessLevels.No + 1) 
    AND No != (SELECT MAX(No) 
      FROM UserAccessLevels); 

(Когда имеется зазор больше, чем один, это возвращает только начало разрыва.)

+0

Привет Большое спасибо. Это полностью сработало. Не могли бы вы объяснить «SELECT 1 FROM UserAccessLevels AS T2 WHERE T2.No = UserAccessLevels.No + 1» эту часть кода, пожалуйста. Я не мог понять, что делает запрос –

+0

См. Страницу, с которой я связан. –