Как использовать EXISTS и NOT EXISTS в одном запросе?



Таблица 1



Id Name  DemoID
1 a 33
2 b 44
3 c 33
4 d 33
5 e 44


Таблица 2



Id DemoID IsTrue
11 33 1
12 44 1


Таблица 3



Id Table1_ID
11 1


Теперь мы можем найти, какой Демоид присутствует в таблице 2, используя следующий запрос -

SELECT Table1.Id FROM Table1 as Table1
WHERE EXISTS
(
SELECT * FROM Table2 as Table2
WHERE Table1.DemoID = Table2.DemoID AND Table2.IsTrue= 1
)


Результат-1,2,3,4,5



Но я также хочу проверить в 3-й таблице, существуют ли эти записи или нет. использование еще одного условия не существует в том же запросе ?

Например Table3 имеет Table1_ID значение столбца только 1 теперь новый не существующий запрос должен дать мне результат 2,3,4,5



Я попробовал как -



SELECT Table1.Id FROM Table1 as Table1
WHERE EXISTS
(
SELECT * FROM Table2 as Table2
WHERE Table1.DemoID = Table2.DemoID AND Table2.IsTrue= 1
)
AND NOT EXISTS (SELECT * FROM Table3)


Но это не дает мне никаких записей. это должно дать мне оставшиеся записи, которые являются 2,3,4,5

553   1  

1 ответ:

Условие:

NOT EXISTS (SELECT * FROM Table3)

...всегда имеет значение false, если в таблице 3 есть какие-либо строки, поэтому ваш запрос не возвращает строк.

Вам нужно добавить предикат, чтобы показать, как квалифицируются строки таблицы 3, как показано полужирным шрифтом ниже:

SELECT Table1.Id
FROM Table1 AS Table1
WHERE EXISTS
    (
        SELECT 1 
        FROM Table2 AS Table2
        WHERE
            Table1.DemoID  = Table2.DemoID 
            AND Table2.IsTrue= 1
    )
    AND NOT EXISTS
    (
        SELECT 1
        FROM Table3
        WHERE
            Table3.Table1_ID = Table1.Id -- New
    );

Demo: db fiddle

Comments

    Ничего не найдено.