Запрос на удаление Android

#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