Googlując, popularną odpowiedzią wydaje się być "po prostu wyłącz tryb awaryjny" :
SET SQL_SAFE_UPDATES = 0;
DELETE FROM instructor WHERE salary BETWEEN 13000 AND 15000;
SET SQL_SAFE_UPDATES = 1;
Jeśli mam być szczery, nie mogę powiedzieć, że kiedykolwiek wyrobiłem sobie nawyk biegania w trybie awaryjnym. Mimo to nie jestem do końca zadowolony z tej odpowiedzi, ponieważ zakłada ona, że powinieneś zmienić konfigurację bazy danych za każdym razem, gdy napotkasz problem.
Tak więc twoje drugie zapytanie jest bliżej celu, ale napotyka inny problem:MySQL nakłada kilka ograniczeń na podzapytania, a jednym z nich jest to, że nie możesz modyfikować tabeli podczas wybierania z niej w podzapytaniu.
Cytując z podręcznika MySQL, Ograniczenia dotyczące podzapytań :
Ta ostatnia część jest twoją odpowiedzią. Wybierz identyfikatory docelowe w tabeli tymczasowej, a następnie usuń, odwołując się do identyfikatorów w tej tabeli:
DELETE FROM instructor WHERE id IN (
SELECT temp.id FROM (
SELECT id FROM instructor WHERE salary BETWEEN 13000 AND 15000
) AS temp
);