Одна вещь, которую EXISTS не может сделать - взять функцию агрегата в подзапросе. Это имеет значение. Если функция агрегата находит любые строки для операций с ними, EXISTS верен, не взирая на то, что это - значение функции ; если же агрегатная функция не находит никаких строк, EXISTS неправилен.
Рисунок 12.4: Использование EXISTS с NOT Попытка использовать агрегаты с EXISTS таким способом, вероятно покажет, что проблема неверно решалась от начала до конца. Конечно, подзапрос в предикате EXISTS может также использовать один или более из его собственных подзапросов. Они могут иметь любой из различных типов, которые мы видели ( или который мы будем видеть ). Такие подзапросы, и любые другие в них, позволяют использовать агрегаты, если нет другой причины. по которой они не могут быть исполяьзованы. Следующий раздел приводит этому пример. В любом случае, вы можете получить тот же самый результат более легко, выбрав поле которое вы исполяьзовали в агрегатной функции, вместо исполяьзования самой этой функции. Другими словами, предикат - EXISTS (SELECT COUNT (DISTINCT sname) FROM Salespeople) - будет эквивалентен - EXISTS (SELECT sname FROM Salespeople), который был позволен выше.
|