在Visual Studio 2010的SQL Server精简版中(可能是SQL Server和SQL一般,我不知道),这个命令是有效的:

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

但是这个命令会产生一个错误:

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

要别名表,你必须说:

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

...虽然我没有看到这个特定语句的别名的意义,特别是因为(至少IIRC)它不再符合严格的ANSI,可能会在为多个平台编写时造成不必要的障碍,并且它为新用户介绍了学习基本的vanilla DML的复杂性和混乱。

这将做,不需要别名:

DELETE dbo.foods WHERE name IN (...);

但是是的,正如评论所建议的那样,对于其他查询表单(例如,任何与相关性、连接、EXISTS等相结合的DML)可能是必要的。在SQL Server中,你可以使用,例如:

DELETE f
  FROM dbo.foods AS f
  INNER JOIN dbo.allergies AS a
  ON f.FoodId = a.FoodId;

请记住,这个查询可能必须在{非SQL Server}上构造不同。


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

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