MySQL удаляет несколько строк в одном условии запроса, уникальном для каждой строки
Так что я знаю, что в MySQL можно вставить несколько строк в один запрос следующим образом:
INSERT INTO table (col1,col2) VALUES (1,2),(3,4),(5,6)
Я хотел бы удалить несколько строк аналогичным образом. Я знаю, что можно удалить несколько строк на основе одинаковых условий для каждой строки, т.е.
DELETE FROM table WHERE col1='4' and col2='5'
или же
DELETE FROM table WHERE col1 IN (1,2,3,4,5)
Тем не менее, что, если я хочу удалить несколько строк в одном запросе, при этом каждая строка имеет набор условий, уникальных для себя? Что-то вроде этого было бы то, что я ищу:
DELETE FROM table WHERE (col1,col2) IN (1,2),(3,4),(5,6)
Кто-нибудь знает способ сделать это? Или это невозможно?
2 ответа
Вы были очень близки, вы можете использовать это:
DELETE FROM table WHERE (col1,col2) IN ((1,2),(3,4),(5,6))
Пожалуйста, посмотрите эту скрипку.
Небольшое продолжение ответа дано, поэтому, надеюсь, полезно для спрашивающего и всех, кто ищет.
Вы также можете SELECT
значения, которые вы хотите удалить. Но следите за ошибкой 1093. Вы не можете указать целевую таблицу для обновления в предложении FROM.
DELETE FROM
orders_products_history
WHERE
(branchID, action) IN (
SELECT
branchID,
action
FROM
(
SELECT
branchID,
action
FROM
orders_products_history
GROUP BY
branchID,
action
HAVING
COUNT(*) > 10000
) a
);
Я хотел удалить все записи истории, где количество записей истории для одного действия / ветви превышает 10000. И благодаря этому вопросу и выбранному ответу я могу.
Надеюсь, что это полезно.
Ричард.
Потребовалось много поиска в Google, но вот что я делаю в Python для MySql, когда хочу удалить несколько элементов из одной таблицы, используя список значений.
#create some empty list
values = []
#continue to append the values you want to delete to it
#BUT you must ensure instead of a string it's a single value tuple
values.append(([Your Variable],))
#Then once your array is loaded perform an execute many
cursor.executemany("DELETE FROM YourTable WHERE ID = %s", values)