#android #sqlite
#Android #sqlite
Вопрос:
Я пытаюсь удалить все строки в одной таблице, которые не имеют соответствующего идентификатора в другой таблице. Поскольку, по-видимому, SQLite не поддерживает объединения при удалении, я пытаюсь сделать что-то в этом роде:
DELETE FROM my_table WHERE my_id NOT IN (SELECT _id FROM my_table2);
Однако, я, по-видимому, не могу использовать rawQuery, поскольку он возвращает курсор, поэтому я должен использовать функцию удаления. У меня возникли некоторые проблемы с получением этой работы. Вот запрос, который я пытаюсь:
mDb.delete("my_table", "my_id NOT IN ?", new String[]{"(SELECT _id FROM my_table2)"});
Спасибо.
Ответ №1:
Вам не следует использовать .rawQuery, как вы заявили, но вы можете использовать .ExecSQL() для выполнения этого. Я сам регулярно использую его для удаления.
Комментарии:
1. @mah не могли бы вы, плз, объяснить, как использовать .ExecSQL для удаления … я попробовал, это выдало мне ошибку.Плз
2. В документе на
.execSQL
говорится «Выполнить один оператор SQL, который НЕ является SELECT / INSERT / UPDATE / DELETE». Почему это все еще работает для этих операторов?
Ответ №2:
Я думаю, что единственный способ — это выполнить ваш select и динамически объединить ваше предложение WHERE.
Ответ №3:
Вы должны использовать ExecSQL вместо rawQuery, потому что rawQuery используется для инструкции, возвращающей данные, а ExecSQL используется для инструкций, которые не возвращают данные, например DELETE