Я много часов пытался отлаживать, почему следующий запрос на удаление фактически ничего не удалял, даже если точно такой же запрос в той же самой базе данных отлично работал в Firefox SQLite Manager:
String deleteSql = "DELETE FROM showsummary WHERE url IN (SELECT url FROM showsummary JOIN article_categories USING (url) WHERE categoryid=20 AND title LIKE 'page=%')";
mDb.rawQuery(deleteSql, null);
Поскольку это немного сложнее как с JOIN, так и с подзапросом, мои мысли обошли некоторые ограничения в реализации sqlite Android в отношении подзапросов, поэтому я попытался упростить запрос. Но все равно ничего не удаляло.
Затем я изменил его на запрос select (просто заменил DELETE на SELECT *), и это сработало. Так что, вероятно, это было не соединение или подзапрос, который был виновником.
Чтобы проверить запрос select, я добавил moveToFirst()
к возвращенному курсору:
mDb.rawQuery(deleteSql, null).moveToFirst();
Когда я позже поменял его обратно на запрос удаления, я забыл удалить moveToFirst()
, а затем он сработает!
Хорошо, что теперь это работает, но я очень смущен, почему нужно перемещать курсор, чтобы фактически удалить что-либо. Это по дизайну или это ошибка?