2015-05-13 2 views
0

У меня возникли проблемы с попыткой выяснить, почему этот запрос не возвращает никаких записей.Не существует фильтрация слишком много результатов?

У меня есть запрос, который выглядит следующим образом

 SELECT c.desc 
    FROM tableA a 
    INNER JOIN TableB b ON a.name = b.name 
    INNER JOIN TableC c ON b.id= c.Id 
    WHERE NOT EXISTS (SELECT 1 
         FROM TableC 
         WHERE tablec.desc IN 
         (SELECT DISTINCT d.desc 
          FROM TableD d 
          INNER JOIN TableE on e.Id = d.Id 
         ) 
        ) 
     AND c.active =1 
     AND b.active=1 

Теперь внутренний запрос из не существует сама по себе возвращает 62 записей, внешний запрос без не существует возвращается 232, но когда побежал, как выше они возвращаются 0, и я не знаю, почему. 62 записи уникальны, и 232 также уникальны, теперь есть перекрытие 31 записи, поэтому я ожидаю, что отправленный запрос вернет 201 запись, но я получаю нуль. Извините за форматирование, но я отправляю это с моего телефона.

ответ

2

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

SELECT * 
FROM Table1 a 
WHERE NOT EXISTS (SELECT 1 
        FROM Table2 b 
        WHERE a.ID = b.ID 
       ) 

Хотя, я бы ожидать, что не фильтровать все строки , поэтому должна быть другая проблема.

Вот удар при фиксации вашего запроса, я заметил недостающее псевдоним TableE:

SELECT C.DESC 
FROM TABLEA A 
INNER JOIN TABLEB B  ON A.NAME = B.NAME 
INNER JOIN TABLEC C  ON B.ID= C.ID 
WHERE NOT EXISTS (SELECT 1 
        FROM TABLEC C2 
        WHERE C2.DESC IN (SELECT DISTINCT D.DESC 
            FROM TABLED D 
            INNER JOIN TABLEE E ON E.ID = D.ID) 
         AND C2.DESC = C.Desc --Relationship between inner/outer 
       ) 
    AND C.ACTIVE = 1 
    AND B.ACTIVE = 1 

В конечном счете все это, вероятно, может быть очищен в зависимости от соотношения между TableC и TableD, может быть, просто:

+1

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