使用 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
中与租赁相关的订单的 orderdate
和 actualreturndate
之间的差异大于 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。做了。
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
中与租赁相关的订单的 orderdate
和 actualreturndate
之间的差异大于 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。做了。