Хотя вы нашли решение, которое работает;использование rowid может быть сопряжено с текущими проблемами.
Существует зависимость от списка, представленного в соответствии с порядком rowid что не обязательно будет приемлемо для пользователя.
Не гарантируется монотонное увеличение столбца rowid (хотя весьма вероятно, если вы не достигнете 9223372036854775807-й строки).
rowid не будет отражать n-ую строку, если строки будут удалены, rowid останется прежним, но VACUUM (очистка) будетперенумеровать rowid .
Если наибольшее из существующих rowid равно 9223372036854775807, то будет сделана попытка присвоить случайное значение, котороене используется, если назначен новый rowid (вставлена новая строка).
Вышеприведенное верно, если псевдоним rowid отсутствует.Если в отношении VACUUM существует такое поведение, то значения rowid будут сохранены и, следовательно, не перенумерованы.
Обычно требуется n-ая позиция, когдасписок представлен, например,
Alan
Mary
Bert
Sue
Fred
Jane
Zac
Louise
Тогда Фред является 5-м в списке или элементом со смещением 4 массива и, следовательно, rowid 5 будет Фред ЕСЛИ данныебыл вставлен в указанном выше порядке .
Однако, если список был упорядочен по имени, он был бы представлен как: -
Alan
Bert
Fred
Jane
Louise
Mary
Sue
Zac
Если рассматривать из rowid перспектива списка будет
1 (Alan)
3 (Bert)
5 (Fred)
6 (Jane)
8 (Louise)
2 (Mary)
4 (Sue)
7 (Zac)
Так что теперь Фред занимает 3-е место, но с помощью WHERE rowid = 3
выберет Берт, а не Фред.
Удаление любой строки, кроме последней (без упорядочивания)вводит несоответствие между уравнением rowid = number in list
.
Предполагаемое использование rowid состоит в том, чтобы идентифицировать конкретную строку, а не быть ожидаемым значением.Во всех вышеупомянутых сценариях осложнения могут быть устранены путем представления списка, но иметь параллельный массив rowid , поэтому при выборе Fred в качестве смещения 4 затем смещение 4 в параллельном массиве дает значение 5.