Удалить первые N строк в базе данных android sqlite
Пожалуйста, дайте мне знать, как удалить n-строки в базе данных android sqlite. Я использовал этот код:
String ALTER_TBL ="delete from " + MYDATABASE_TABLE +
"where"+KEY_ID+"in (select top 3"+ KEY_ID +"from"+ MYDATABASE_TABLE+"order by _id );";
sqLiteDatabase.execSQL(ALTER_TBL);
Но это показывает ошибку.
03-21 13:19:39.217: INFO/Database(1616): sqlite returned: error code = 1, msg = near "in": syntax error
03-21 13:19:39.226: ERROR/Database(1616): Failure 1 (near "in": syntax error) on 0x23fed8 when preparing 'delete from detail1where_id in (select top 3_idfromdetail1order by _id );'.
Ответы
Ответ 1
String ALTER_TBL ="delete from " + MYDATABASE_TABLE +
" where "+KEY_ID+" in (select "+ KEY_ID +" from "+ MYDATABASE_TABLE+" order by _id LIMIT 3);";
- в sqlite, о котором я знаю, нет команды "top 3", вам нужно добавить лимит
- обратите внимание на пробелы, когда вы добавляете строки вместе:
"delete from" + TABLE + "where" = "delete frommytablewhere"
Этот подход использует два шага для удаления первых N строк.
-
Найдите первые N строк:
SELECT id_column FROM table_name ORDER BY id_column LIMIT 3
Результатом является список идентификаторов, которые представляют первые N (здесь: 3) строки. Часть ORDER BY
важна, поскольку SQLite не гарантирует никакого порядка без этого предложения. Без ORDER BY
оператор может удалить 3 случайные строки.
-
Удалите любую строку из таблицы, которая соответствует списку идентификаторов:
DELETE FROM table_name WHERE id_column IN ( {Result of step 1} )
Если результат с шага 1 пуст, ничего не произойдет, если будет меньше N строк, они будут удалены.
Важно отметить, что id_column
должен быть уникальным, иначе больше, чем предполагаемые строки будут удалены. Если столбец, который используется для упорядочения, не является уникальным, весь оператор можно изменить на DELETE FROM table_name WHERE unique_column IN (SELECT unique_column FROM table_name ORDER BY sort_column LIMIT 3)
. Подсказка: SQLite ROWID
является хорошим кандидатом для unique_column
при удалении по таблицам (может не работать при удалении по видам - не уверен здесь).
Чтобы удалить N строк last, порядок сортировки должен быть отменен до нисходящего (DESC
):
DELETE FROM table_name WHERE unique_column IN (
SELECT unique_column FROM table_name ORDER BY sort_column DESC LIMIT 3
)
Чтобы удалить строку N th в M th предложение LIMIT
может быть расширено на OFFSET
. Пример ниже пропустит первые 2 строки и вернет/удалит следующий 3.
SELECT unique_column FROM table_name ORDER BY sort_column LIMIT 3 OFFSET 2
Установка отрицательного значения LIMIT
(например, LIMIT -1 OFFSET 2
) приведет к возврату всех строк, кроме первых 2, что приведет к удалению всего, кроме первых двух строк, что также может быть выполнено путем поворота SELECT .. WHERE .. IN ()
в SELECT .. WHERE .. NOT IN ()
SQLite имеет параметр , чтобы включить часть ORDER BY x LIMIT n
непосредственно в инструкции DELETE
без подзапроса. Эта опция не включена на Android и не может быть активирована, но это может представлять интерес для людей, использующих SQLite в других системах:
DELETE FROM table_name ORDER BY sort_column LIMIT 3
Ответ 2
Кажется, что вы пропустили несколько пробелов:
"where"+KEY_ID+"in..
должен быть:
"where "+KEY_ID+" in...
Кроме того, вам нужно использовать limit вместо верхнего:
Ответ 3
Я сделаю:
db.delete(MYDATABASE_TABLE, "KEY_ID > "+ value, null);
Ответ 4
вы можете попробовать этот код
int id;
public void deleteRow(int id) {
myDataBase.delete(TABLE_NAME, KEY_ID + "=" + id, null);
}
Идентификатор строки
public void deleteRow(String id) {
myDataBase.delete(TABLE_NAME, KEY_ID + "=\" " + id+"\"", null);
}
Ответ 5
Это немного длинная процедура, но вы можете сделать это, как это
сначала получите столбец ids таблицы, из которого вы хотите удалить определенные значения
public Cursor KEY_IDS() {
Cursor mCursor = db.rawQuery("SELECT KEYID " +
" FROM MYDATABASE_TABLE ;", null);
if (mCursor != null)
{
mCursor.moveToFirst();
}
return mCursor;
}
Соберите его в списке массивов
ArrayList<String> first = new ArrayList<String>();
cursor1 = db.KEY_IDS();
cursor1.moveToFirst();
startManagingCursor(cursor1);
for (int i = 0; i < cursor1.getCount(); i++) {
reciv1 = cursor1.getString(cursor1
.getColumnIndex(DBManager.Player_Name));
second.add(reciv1);
}
и запрос удаления огня
for(int i = 0 ;i<second.size(); i++)
{
db.delete(MYDATABASE_TABLE KEYID +"=" + second.get(i) , null);
}
Ответ 6
Вы можете использовать следующий режим: (в дополнение к ответу, предоставленному "zapl" ).
**DELETE FROM {Table-X} WHERE _ID NOT IN
(SELECT _ID FROM {Table-X} ORDER BY _ID DESC/ASC LIMIT (SELECT {Limit-Column} FROM {SpecificationTable}) );**
Где {tаблица-X} ссылается на таблицу, которую вы хотите удалить, _ID является основным уникальным столбцом
DESC/ASC. Исходя из того, хотите ли вы удалить верхние записи или последние записи и, наконец, в предложении "LIMIT", мы предоставляем коэффициент "n", используя другой запрос, который вызывает в {Limit-Column} из { SpecificationTable}: содержит значение, против которого вы хотите их удалить.
Надеюсь, это поможет кому-то.
Счастливое кодирование.
Ответ 7
Удалить первые N (100) строк в базе данных sqlite
Delete from table WHERE id IN
(SELECT id FROM table limit 100)