72

所以我知道在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)

有谁知道这样做的方法?还是不可能?

4

3 回答 3

127

你非常接近,你可以使用这个:

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

请看这个小提琴

于 2013-02-15T22:20:12.783 回答
12

对给出的答案进行了轻微扩展,因此希望对提问者和其他任何人有用。

您还可以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 的所有历史记录。多亏了这个问题和选择的答案,我可以。

希望这是有用的。

理查德。

于 2014-06-10T08:03:31.423 回答
-1

进行了很多谷歌搜索,但是当我想使用值列表从单个表中删除多个项目时,这是我在 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)
于 2020-09-16T15:51:54.643 回答