sqlite удалить количество строк

Мне нужно написать запрос SQLlite, который удалит строки из таблицы выше 200. Я думал, что это сработает:

DELETE FROM [tbl_names] WHERE count(*) > 200

но это дает мне: неправильное использование агрегатной функции count()

Я знаю, что есть пункт ограничения, который я могу использовать, но если я использую:

DELETE FROM [tbl_names] LIMIT 200

похоже, что он удалит первые 200 строк.


person Kris B    schedule 08.10.2011    source источник
comment
Для всех, кто заинтересован, похоже, это работает: УДАЛИТЬ ИЗ [tbl_name] WHERE rowId IN (SELECT rowId FROM [tbl_name] ORDER BY rowId LIMIT 1000 OFFSET 200)   -  person Kris B    schedule 10.10.2011


Ответы (1)


Все строки в SQLite имеют поле rowid, которое вы можете использовать для поиска строк больше 200. Например:

DELETE FROM [tbl_names] WHERE rowid > 200

Вы также можете использовать смещение с вашим лимитом:

DELETE FROM [tbl_names] LIMIT 10000 offset 200

использование roqid кажется лучшим выбором.

person Doug Flower    schedule 08.10.2011
comment
В моей таблице есть целочисленное поле первичного ключа с автоинкрементом, и, судя по тому, что я прочитал, если у вас определен первичный ключ, он будет использовать его для идентификатора строки, что не сработает для меня, поскольку отдельные строки могут быть удалены до того, как мой запрос удалить строки выше 200. - person Kris B; 09.10.2011