it-swarm.com.de

MySQL löscht mehrere Zeilen in einer Abfragebedingung, die für jede Zeile eindeutig ist

Ich weiß also, dass es in MySQL möglich ist, mehrere Zeilen in eine Abfrage einzufügen:

INSERT INTO table (col1,col2) VALUES (1,2),(3,4),(5,6)

Ich möchte mehrere Zeilen auf ähnliche Weise löschen. Ich weiß, dass es möglich ist, mehrere Zeilen basierend auf den exakt gleichen Bedingungen für jede Zeile zu löschen, d. H.

DELETE FROM table WHERE col1='4' and col2='5'

oder

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

Was ist jedoch, wenn ich mehrere Zeilen in einer Abfrage löschen möchte, wobei jede Zeile eine Reihe von Bedingungen hat, die für sich selbst eindeutig sind? So etwas würde ich suchen:

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

Kennt jemand einen Weg, dies zu tun? Oder geht das nicht?

58
srchulo

Du warst sehr nah dran, das kannst du benutzen:

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

Bitte sehen Sie diese Geige .

96
fthiella

Eine leichte Erweiterung der gegebenen Antwort, also hoffentlich nützlich für den Fragesteller und alle anderen, die suchen.

Sie können auch die zu löschenden Werte SELECT. Aber achten Sie auf den Fehler 1093 - Sie können die zu aktualisierende Zieltabelle nicht in der FROM-Klausel angeben.

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

Ich wollte alle Verlaufsdatensätze löschen, bei denen die Anzahl der Verlaufsdatensätze für eine einzelne Aktion/einen Zweig 10.000 überschreitet. Und dank dieser Frage und der gewählten Antwort kann ich.

Hoffe das nützt.

Richard.

11