Почему я не могу использовать псевдоним в инструкции DELETE?

В SQL Server Compact Edition в Visual Studio 2010 (возможно, SQL Server и SQL вообще, я не знаю), эта команда работает:

DELETE FROM foods WHERE (name IN ('chickens', 'rabbits'))

но эта команда вызывает ошибку: Error near identifier f. Expecting OUTPUT.

DELETE FROM foods f WHERE (f.name IN ('chickens', 'rabbits'))

Ответ 1

Для псевдонима таблицы, которую вы должны сказать:

DELETE f FROM dbo.foods AS f WHERE f.name IN (...);

Я не вижу точки сглаживания для этого конкретного оператора DELETE, тем более, что (по крайней мере, IIRC) это больше не соответствует строгому ANSI. Но да, как следует из комментариев, это может потребоваться для других форм запроса (например, корреляции).

Ответ 2

Оператор delete имеет странный синтаксис. Это происходит следующим образом:

DELETE f FROM foods f WHERE (f.name IN ('chickens', 'rabbits'))