簡體   English   中英

MySQL 在一個查詢條件中刪除多行,每一行都是唯一的

[英]MySQL delete multiple rows in one query conditions unique to each row

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

我想刪除單個操作/分支的歷史記錄數超過 10,000 的所有歷史記錄。 感謝這個問題和選擇的答案,我可以。

希望這是有用的。

理查德.

進行了大量的谷歌搜索,但是當我想使用值列表從單個表中刪除多個項目時,這是我在 Python 中為 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM