Подзапрос возвращает более 1 значения в операторе удаления, используя datediff - PullRequest
0 голосов
/ 11 апреля 2019
delete from Rentals
where (select datediff(day, OrderDate, actualReturnDate) 
       from Orders 
       inner join rentals on Orders.orderNumber = Rentals.orderNumber) > 60

Я получаю сообщение об ошибке

Подзапрос вернул более 1 значения

Ответы [ 3 ]

1 голос
/ 11 апреля 2019

Подзапросы, которые у вас есть в ваших запросах, возвращают более одного значения, что недопустимо, если вы сравниваете их с одним значением.

Я подозреваю, что вы просто пишете оператор удаления неправильно,Ваш вопрос довольно тонкий о том, что вы пытаетесь достичь.

Я приму предположение о том, что вы намеревались написать:

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

, который удалит строки в rentals, где разница между orderdate и actualreturndate большечем 60 для заказов, связанных с арендой.

Обратите внимание, что, поскольку у вас есть проблемы с написанием довольно тривиального запроса, подобного этому, рекомендуется сначала прочитать хорошую книгу или что-нибудь, что научит вас основамнаписание запросов T-SQL.

0 голосов
/ 11 апреля 2019

Эта часть запроса недействительна:

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

Это связано с тем, что оператор select возвращает более одной строки, и механизм SQL не может определить, какой из датировочных значений следует сравнивать с 60, т. Е. Оба? только первый? в или, в и? ... это не ясно, поэтому движок SQL жалуется. Вы можете включить фильтр в подзапрос или переписать запрос как TT. сделал.

0 голосов
/ 11 апреля 2019

Вы можете попробовать это:

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)

после «ГДЕ» Sql сравнивает значения в поле (в этом случае поле = столбец), а не в коллекции значений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...