使用 datediff 的删除语句中的子查询 return 多于 1 个值

Subquery return more than 1 value in deletion statement using datediff

delete from Rentals
where (select datediff(day, OrderDate, actualReturnDate) 
       from Orders 
       inner join rentals on Orders.orderNumber = Rentals.orderNumber) > 60

我收到一个错误

Subquery returned more than 1 value

您的查询中的子查询 return 多个值,如果将它们与单个值进行比较,则不允许这样做。

我怀疑您只是以错误的方式编写了 delete 语句。关于您要实现的目标,您的问题相当薄弱。

我猜猜你想写什么:

delete Rentals 
from Orders 
     INNER JOIN rentals ON Orders.orderNumber=Rentals.orderNumber
where DATEDIFF(day, OrderDate, actualReturnDate)>60

这将删除 rentals 中与租赁相关的订单的 orderdateactualreturndate 之间的差异大于 60 的行。

请注意,由于您在编写这样一个相当琐碎的查询时遇到问题,因此最好先阅读一本好书或任何可以教您编写 T-SQL 查询的基础知识的书籍。

你可以试试这个:

delete from Rentals
where Rentals.ID in (select rentals.ID
       from Orders 
       inner join rentals on Orders.orderNumber = Rentals.orderNumber
       datediff(day, OrderDate, actualReturnDate) > 60)

在 "WHERE"、Sql 之后比较字段中的值(在这种情况下,字段 = 列),而不是值的集合

那部分查询无效:

(select datediff(day, OrderDate, actualReturnDate) 
       from Orders 
       inner join rentals on Orders.orderNumber = Rentals.orderNumber) > 60

那是因为 select 语句 returns 多于一行并且 SQL 引擎无法识别哪个 datediff 应该与 60 进行比较,即两者?只有第一个? in or, in and?... 这还不清楚,这就是 SQL 引擎抱怨的原因。您可以在子查询中包含过滤器或将查询重写为 TT。做了。