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)
誰もこれを行う方法を知っていますか?それとも不可能ですか?
あなたは非常に近かったので、これを使用できます:
DELETE FROM table WHERE (col1,col2) IN ((1,2),(3,4),(5,6))
こちらをご覧ください fiddle 。
与えられた答えをわずかに拡張したものであるため、質問者や他の誰かに役立つことを願っています。
削除したい値を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を超えるすべての履歴レコードを削除したかった。そして、この質問と選ばれた答えのおかげで、私はできる。
これが役に立つことを願っています。
リチャード。