Mysql
 sql >> Database >  >> RDS >> Mysql

mysql elimina in modalità provvisoria

Cercando su Google, la risposta popolare sembra essere "Disattiva la modalità provvisoria" :

SET SQL_SAFE_UPDATES = 0;
DELETE FROM instructor WHERE salary BETWEEN 13000 AND 15000;
SET SQL_SAFE_UPDATES = 1;

Se devo essere onesto, non posso dire di aver mai preso l'abitudine di correre in modalità provvisoria. Tuttavia, non sono del tutto a mio agio con questa risposta poiché presuppone solo che dovresti cambiare la configurazione del tuo database ogni volta che incontri un problema.

Quindi, la tua seconda query è più vicina al bersaglio, ma incontra un altro problema:MySQL applica alcune restrizioni alle sottoquery e una di queste è che non puoi modificare una tabella mentre selezioni da essa in una sottoquery.

Citando il manuale MySQL, Restrizioni sulle sottoquery :

Quest'ultimo pezzo è la tua risposta. Seleziona gli ID target in una tabella temporanea, quindi elimina facendo riferimento agli ID in quella tabella:

DELETE FROM instructor WHERE id IN (
  SELECT temp.id FROM (
    SELECT id FROM instructor WHERE salary BETWEEN 13000 AND 15000
  ) AS temp
);

Demo SQLFiddle .