web-dev-qa-db-fra.com

MySQL supprime plusieurs lignes dans une condition de requête unique pour chaque ligne

Je sais donc que dans MySQL , il est possible d'insérer plusieurs lignes dans une même requête, comme ceci:

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

Je voudrais supprimer plusieurs lignes de la même manière. Je sais qu'il est possible de supprimer plusieurs lignes en fonction exactement des mêmes conditions pour chaque ligne, c'est-à-dire.

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

ou

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

Cependant, que se passe-t-il si je souhaite supprimer plusieurs lignes dans une requête, chaque ligne ayant un ensemble de conditions unique? Quelque chose comme ce serait ce que je cherche:

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

Est-ce que quelqu'un connaît un moyen de faire cela? Ou n'est-ce pas possible?

58
srchulo

Vous étiez très proche, vous pouvez utiliser ceci:

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

S'il vous plaît voir ceci violon .

96
fthiella

Une légère extension de la réponse donnée, donc utile, espérons-le, pour le demandeur et tous ceux qui cherchent.

Vous pouvez également SELECT les valeurs que vous souhaitez supprimer. Mais faites attention à l'erreur 1093 - Vous ne pouvez pas spécifier la table cible pour la mise à jour dans la clause 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
    );

Je voulais supprimer tous les enregistrements d'historique pour lesquels le nombre d'enregistrements d'historique pour une action/branche unique dépasse 10 000. Et grâce à cette question et réponse choisie, je peux.

J'espère que c'est utile.

Richard.

11
Richard A Quadling