Подтвердить что ты не робот

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)

Кто-нибудь знает, как это сделать? Или это невозможно?

4b9b3361

Ответ 1

Вы были очень близки, вы можете использовать это:

DELETE FROM table WHERE (col1,col2) IN ((1,2),(3,4),(5,6))

Пожалуйста, смотрите fiddle.

Ответ 2

Небольшое расширение ответа, так что, надеюсь, полезно для искателя и любого другого.

Вы также можете 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
    );

Я хотел удалить все записи истории, где количество записей истории для одного действия/ветки превышает 10 000. И благодаря этому вопросу и выбранному ответу я могу.

Надеюсь, что это полезно.

Ричард.