Как использовать 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
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