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

问题描述 投票:0回答:2

在 Visual Studio 2010 中的 SQL Server Compact Edition 中(也许 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'))
sql sql-server sql-server-ce
2个回答
334
投票

要给表起别名,你必须说:

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

对于这么简单的语句,这样就可以了,并且不需要别名:

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} 上以不同的方式构建。


98
投票

删除语句的语法很奇怪。事情是这样的:

DELETE f FROM foods f WHERE (f.name IN ('chickens', 'rabbits'))
© www.soinside.com 2019 - 2024. All rights reserved.