MySQL的独特的每一行一个查询条件删除多行(MySQL delete multiple rows

2019-07-20 00:42发布

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

有谁知道的方式做到这一点? 或者是不可能的?

Answer 1:

你是非常接近的,你可以这样做:

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

请参阅此琴 。



Answer 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。 多亏了这个问题,并选择答案,我可以。

希望这是使用的。

理查德。



文章来源: MySQL delete multiple rows in one query conditions unique to each row