为什么我不能在DELETE语句中使用别名?

在Visual Studio 2010的SQL Server精简版中(可能是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'))
80892 次浏览

要别名表,你必须说:

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

我没有看到这个特定的DELETE语句的混叠的意义,特别是因为(至少IIRC)这不再符合严格的ANSI。但是是的,正如评论所建议的,对于其他查询表单(例如相关性)可能是必要的。

delete语句的语法很奇怪。它是这样的:

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