MySQL DELETE синтаксическая ошибка
08 Июн 2010
Есть ли синтаксическая ошибка в следующем SQL-запросе?
1 2 3 |
DELETE FROM mytable t WHERE t.id IN (1,2,3,4,5) |
Ошибка есть! Правда, я не сразу понял, в чем дело и почему MySQL не хочет пропускать запрос.
Правильным будет любой из следующих вариантов:
1 2 3 4 5 |
DELETE FROM mytable WHERE id IN (1,2,3,4,5); DELETE t FROM mytable t WHERE t.id IN (1,2,3,4,5); |
Суть в том, что если используете алиас для таблицы, то его нужно указать после DELETE.
Или можно указать имя таблицы вместо алиаса.
СУБД должна знать из какой таблицы производить удаление.
Более понятна такая логика MySQL будет при использовании JOIN-синтаксиса оператора DELETE, или просто при удалении из нескольких таблиц:
1 2 3 4 5 6 7 8 9 10 11 12 |
-- удаление произойдет только из таблицы table1 DELETE t1 FROM table1 t1 INNER JOIN table2 t2 ON t1.id = t2.table1_id WHERE t1.id IN (1,2,3,4,5) -- удалятся данные из таблиц table1 и table2 DELETE t1, t2 FROM table1 t1, table2 t2, table3 t3 WHERE t1.id=t2.id AND t2.id=t3.id |
Спасибо! Я уже думал, что вечер безвозвратно потерян. Удаление из двух таблиц просто съело мне мозг, а всё оказалось так просто