72

したがって、MySQLでは、次のように1つのクエリに複数の行を挿入できることがわかっています。

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)

ただし、1つのクエリで複数の行を削除し、各行に固有の条件のセットがある場合はどうなりますか?このようなものが私が探しているものになります:

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
    );

1つのアクション/ブランチの履歴レコードの数が10,000を超えるすべての履歴レコードを削除したかったのです。そして、この質問と選ばれた答えのおかげで、私はそうすることができます。

これがお役に立てば幸いです。

リチャード。

于 2014-06-10T08:03:31.423 に答える
-1

多くのグーグルを取りましたが、値のリストを使用して単一のテーブルから複数のアイテムを削除したいときに、PythonforMySqlで行うことは次のとおりです。

#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 に答える