У меня есть таблица в SQLite с именем UserAccessLevels
, а имя столбца первичного ключа - No
. Последовательность первичного ключа 0,1,3,4
в первичном ключе 2
отсутствует. Возможно ли найти этот нерегулярный первичный ключ 2
, выполнив любой запрос в базе данных SQLite.Можно ли определить неравномерность в первичном ключе базы данных SQLite
ответ
Это может быть сделано с 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);
(Когда имеется зазор больше, чем один, это возвращает только начало разрыва.)
Привет Большое спасибо. Это полностью сработало. Не могли бы вы объяснить «SELECT 1 FROM UserAccessLevels AS T2 WHERE T2.No = UserAccessLevels.No + 1» эту часть кода, пожалуйста. Я не мог понять, что делает запрос –
См. Страницу, с которой я связан. –
Наверное, нет. Большинство баз данных, в которых используется любое автозапуск, будут пропускать номера из-за откатов или запись может быть удалена. НИКОГДА не предполагайте, что в нумерации таблицы базы данных не будет пробелов. – HLGEM
@HLGEM О, спасибо .......... :) –
Возможно ли найти недостающее значение? Да. Это необходимо? Нет. Не беспокойтесь. Требование *** *** только для (сгенерированного) первичного ключа заключается в том, что оно уникально. Это не имеет значения, если у вас есть пробел в цифрах или нет. –