在 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/