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

标签 sql sql-server sql-server-ce

在 Visual Studio 2010 中的 SQL Server Compact Edition 中(也许是 SQL Server 和一般 SQL,我不知道),此命令有效:

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

但是此命令会产生错误:标识符 f 附近的错误。期待输出。

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

最佳答案

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

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

...虽然我看不到这个特定语句的别名的意义,特别是因为(至少 IIRC)这不再符合严格的 ANSI,可能在为多个平台编写时会造成不必要的障碍,并且会给学习普通 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} 上以不同的方式构造。

关于sql - 为什么不能在 DELETE 语句中使用别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11005209/

相关文章:

c# - 函数的指定参数值无效。 [ 参数 # = 1,函数名称(如果已知)= isnull ]

visual-studio-2010 - 如何在VS2010的紧凑型数据库中添加外键?

mysql - 使用平均值获取分数作为一组合格率的特定查询

c# - 数据库预定操作

F# SqlDataConnection TypeProvider 不适用于 Sql Server Ce

sql - 如何在SQL Server中将nvarchar类型转换为仅时间类型格式

sql - Decimal(19,4) 或 Decimal(19.2) - 我应该使用哪个?

MYSQL select unique id's where column value is not null 在一个或多个记录中

SQL从分组数据中添加例子

mysql - 如果我将表用于只读,是否可以对查询中使用的每一列建立索引?