所以我知道在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))
请看这把小提琴。
对给出的答案进行了轻微的扩展,因此,希望对询问者和其他人有用。
您还可以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的所有历史记录。感谢这个问题和选择的答案,我可以。
希望这个有用。
理查德。
花了很多谷歌搜索,但以下是我在Python for 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)