Подзапрос возвратил более 1 значения. Это недопустимо, когда подзапрос следует за =,! =, <, <=,>,> = Или когда подзапрос используется как выражение

У меня есть хранимая процедура, которая select * from book table , используя sub-запрос, мой запрос

 USE [library] GO /****** Object: StoredProcedure [dbo].[report_r_and_l] Script Date: 04/17/2013 12:42:39 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER procedure [dbo].[report_r_and_l] @fdate date, @tdate date, @key varchar(1) as if(@key='r') select * from dbo.books where isbn =(select isbn from dbo.lending where (act between @fdate and @tdate) and (stat ='close')) else if(@key='l') select * from dbo.books where isbn =(select isbn from dbo.lending where lended_date between @fdate and @tdate) 

Я знаю, что sub-запрос возвращает более одного запроса в основной запрос, но я не знаю, как избежать этой ошибки, может ли кто-нибудь мне помочь?

Проблема в том, что эти два запроса возвращают несколько строк:

 select isbn from dbo.lending where (act between @fdate and @tdate) and (stat ='close') select isbn from dbo.lending where lended_date between @fdate and @tdate 

У вас есть два варианта, в зависимости от желаемого результата. Вы можете либо заменить вышеперечисленные запросы тем, что гарантированно будет возвращать одну строку (например, с помощью SELECT TOP 1 ), либо вы можете переключить свой = на IN и вернуть несколько строк, например:

 select * from dbo.books where isbn IN (select isbn from dbo.lending where (act between @fdate and @tdate) and (stat ='close')) 

Используйте In вместо =

  select * from dbo.books where isbn in (select isbn from dbo.lending where act between @fdate and @tdate and stat ='close' ) 

или вы можете использовать Exists

 SELECT t1.*,t2.* FROM books t1 WHERE EXISTS ( SELECT * FROM dbo.lending t2 WHERE t1.isbn = t2.isbn and t2.act between @fdate and @tdate and t2.stat ='close' ) 

Вы можете использовать оператор IN, как показано ниже.

 select * from dbo.books where isbn IN (select isbn from dbo.lending where lended_date between @fdate and @tdate) 
Interesting Posts

Веб-сайт MVC4 работает только на одном ПК, а не на другом ПК, не работает с «Сетевыми интерфейсами SQL, ошибка: 26»

Создание запроса с этими данными

Rails + SQL Server + Mac OS X

Как поместить инструкцию insert в функцию SQL?

Опасность пробы против входа в предикат

Сортировать по (asc | desc) в linq для SQL Server обрабатывает DateTime иначе

Добавление столбцов в несколько таблиц с одинаковым именем столбца

Выберите только одну строку для каждого идентификатора и даты

Выполнение пакетных T-SQL-скриптов, содержащих инструкции GO, вызывает исключение

SQL Select с условием WHERE, что происходит в фоновом режиме?

Можно создать поддельную таблицу в SQL Server 2005

Как я могу узнать настройку индекса SQL Server?

пакетный файл для выполнения SQL-скриптов – без возврата каретки

Выбор на основе множества фильтров

Как долго должен возвращаться запрос, который возвращает 5 миллионов записей?

Давайте будем гением компьютера.