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)
Другие вопросы по тегам