Ответ 1
Вы были очень близки, вы можете использовать это:
DELETE FROM table WHERE (col1,col2) IN ((1,2),(3,4),(5,6))
Пожалуйста, смотрите fiddle.
Итак, я знаю, что 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)
Кто-нибудь знает, как это сделать? Или это невозможно?
Вы были очень близки, вы можете использовать это:
DELETE FROM table WHERE (col1,col2) IN ((1,2),(3,4),(5,6))
Пожалуйста, смотрите fiddle.
Небольшое расширение ответа, так что, надеюсь, полезно для искателя и любого другого.
Вы также можете 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. И благодаря этому вопросу и выбранному ответу я могу.
Надеюсь, что это полезно.
Ричард.