Цель:
Я пытаюсь выполнить массовое удаление в таблице sqlite вместо удаления каждых данных с помощью цикла for. Итак, я пытаюсь использовать "IN".
Случай:
У меня есть два параметра при выполнении запроса. Первое type, второе order_id. Я хочу удалить данные, где type — это "order_book", а order_id — это ["B001", "B002", ...].
Что я пробовал, но не работает:
window.sqlitePlugin.openDatabase({ name: 'dbname.db', location: 'default' }).executeSql("DELETE FROM table_name WHERE type='order_book' AND order_id IN ('B001', 'B002')", [], (res) => { console.info(res.rows); });
// => this is not work
То, что я пробовал, работает, но отсутствует параметр типа:
window.sqlitePlugin.openDatabase({ name: 'dbname.db', location: 'default' }).executeSql("DELETE FROM table_name WHERE order_id IN ('B001', 'B002')", [], (res) => { console.info(res.rows); });
// => data with order_id B001 and B002 deleted
Итак, что здесь не так? Мне также нужно определить, что такое type, потому что разные type могут иметь одинаковые order_id (не спрашивайте, почему это происходит...)
Заранее благодарю за любую помощь!
@Дж.Р. Вы имели в виду, что запрос должен быть таким? => window.sqlitePlugin.openDatabase({ name: 'dbname.db', location: 'default' }).executeSql("УДАЛИТЬ ИЗ table_name WHERE type='order_book' COLLATE NOCASE AND order_id IN ('B001', 'B002' )", [], (res) => { console.info(res.rows); });
@Дж.Р. ну, это рабочий товарищ. Но я хочу знать, почему COLLATE NOCASE работает? Я имею в виду, я обнаружил, что sqlite чувствителен к регистру, но я на 100% уверен, что все данные в нижнем регистре. Итак, я думаю, что мне не нужно делать запрос нечувствительным к регистру.
да. Вы также можете проверить, хранятся ли данные типа в смешанном или верхнем регистре и можете ли вы найти «order_book» в своей таблице.
@Дж.Р. а также, не могли бы вы помочь мне, как передать параметр внутри []? Я имею в виду, что я передаю параметр значения непосредственно в строке запроса, например type='order_book'. Что я думаю, чтобы сделать это так => window.sqlitePlugin.openDatabase({ имя: 'dbname.db', местоположение: 'по умолчанию' }). (?)", ['order_book', ['B001', 'B002'] ], (res) => { console.info(res.rows); }); но это не работает.
Не уверен ... работает ли «B001, B002» (а не массив)?
@Дж.Р. idk, чего я хочу добиться, так это создать переменную, содержащую онлайн-запрос, и все параметры значения в запросе должны быть похожи на order_book =? и получить данные из другой функции. Итак, я мог бы попытаться манипулировать данными, чтобы работал один запрос. Но, Idk правильный запрос и формат параметра, который может получить запрос
@Дж.Р. пожалуйста, ответьте на вопрос, упомянув, что COLLATE NOCASE. Я приму это как ответ. Потому что это на самом деле ответ на мой первоначальный вопрос. Спасибо
Акза, спасибо, сделаю. Ранее я имел в виду передачу строки «B001, B002», а не массива; эта строка может быть в переменной. Я не уверен в этом, хотя, возможно, задам еще один вопрос.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если данные хранятся в смешанном или верхнем регистре в столбце type, то сравнение с учетом регистра SQLite не найдет их. Вы можете проверить сохраненные данные или сравнить строки следующим образом:
WHERE type='order_book' COLLATE NOCASE ...
Запрос выглядит нормально, поэтому я предполагаю, что это данные, которые хранятся в
type. Обратите внимание, что сравнение SQLlite может быть чувствительным к регистру. Вы можете проверить сохраненные данные или сравнить строки следующим образом: WHERE type='order_book' COLLATE NOCASE