Существует в том, где предложение возвращает неверный результат - PullRequest
0 голосов
/ 04 февраля 2012

Пожалуйста, рассмотрите этот запрос:

SELECT tesd.State_Code,
   tesd.City_Code,
   tesd.Row_ID,
   tesd.Qsno,
   tesd.Total_Period,
   tesd.Current_Period,
   tesd.Week,
   tesd.Block_No,
   tesd.Family_ID,
   tesd.Line_ID,
   tesd.Page_ID
   INTO #tmp
FROM   Specification_Master tesm
   INNER JOIN Specification_Details tesd
        ON  tesd.Master_Id = tesm.Id
WHERE  tesm.[Year] = 2000
   AND tesm.[Month] = 10
   AND tesd.City_Code IN ('001')

Я запросил некоторые данные из 2 таблиц и вставил их в #tmp. Затем я хочу выбрать данные из 2 других таблиц и проверить, что в одной из этих таблиц есть значенияв #tmp tbale:

SELECT *
FROM   tbl_Details D
   INNER JOIN tbl_Master tem
        ON  D.ID_Master = tem.Id
WHERE  D.Period <= 5
 AND EXISTS (
           SELECT Row_ID
           FROM   #tmp tm
           WHERE  tm.Current_Period > 1
                  AND tm.State_Code = tem.State_Code
                  AND tm.City_Code = tem.City_Code
                  AND tm.Qsno = tem.Qsno
       )
   AND D.[Status] > 2 

, когда я запускаю этот запрос, я получаю только одну строку, но когда я изменяю EXISTS на NOT EXISTS, я получаю больше строк. Я выполняю этот запрос отдельно:

SELECT Row_ID
           FROM   #tmp tm,tbl_Master tem 
           WHERE  tm.Current_Period > 1
                  AND tm.Ostan_Code = tem.State_Code
                  AND tm.City_Code = tem.City_Code
                  AND tm.Porseshname_ID = tem.Qsno

и возвращает 30 строк.Почему Exists имеет такое поведение?

1 Ответ

2 голосов
/ 04 февраля 2012

Exists возвращает логическое значение на основе результатов подзапроса. Не имеет значения, возвращаются ли 1 или 30 строк. Количество извлекаемых строк основывается на операторе select *, а не на предложении Exists.

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