sql >> Databasteknik >  >> RDS >> Mysql

MySQL DELETE FROM med subquery som villkor

För andra som tycker att den här frågan vill raderas medan de använder en underfråga, lämnar jag det här exemplet för att överlista MySQL (även om vissa verkar tro att det inte går att göra):

DELETE e.*
FROM tableE e
WHERE id IN (SELECT id
             FROM tableE
             WHERE arg = 1 AND foo = 'bar');

ger dig ett felmeddelande:

ERROR 1093 (HY000): You can't specify target table 'e' for update in FROM clause

Men denna fråga:

DELETE e.*
FROM tableE e
WHERE id IN (SELECT id
             FROM (SELECT id
                   FROM tableE
                   WHERE arg = 1 AND foo = 'bar') x);

kommer att fungera bra:

Query OK, 1 row affected (3.91 sec)

Slå in din underfråga i en ytterligare underfråga (här kallad x) så gör MySQL gärna vad du ber om.



  1. Vad är databasbegränsningar?

  2. Vad händer om du inte begår en transaktion till en databas (säg SQL Server)?

  3. Slavning av en kraschad MySQL-masterserver i semisynkron replikeringsinställning

  4. Hur man jämför två arrayer och väljer bara de icke-matchande elementen i postgres