EXISTS и агрегаты

Одна вещь, которую EXISTS не может сделать — взять функцию агрегата в подзапросе. Это имеет значение. Если функция агрегата находит любые строки для операций с ними, EXISTS верен, не взирая на то, что это — значение функции ; если же агрегатная функция не находит никаких строк, EXISTS неправилен.

SQL Execution Log

SELECT DISTINCT snum FROM Salespeople outer| WHERE NOT EXISTS |(SELECT *
FROM Customers inner WHERE inner.snum = outer.snum
AND inner.cnum < > outer.cnum);

cnum

1003

1004

1007

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

‹ Использование NOT EXISTS
Вверх
Более удачный пример подзапроса ›

Айтистанция
Добавить комментарий

Adblock
detector