WHERE
предложение вводит условие для отдельных строк ; Предложение HAVING
вводит условие для агрегатов , т. Е. Результатов выбора, когда один результат, такой как число, среднее, минимальное, максимальное или суммарное, был получен из нескольких строк , Ваш запрос требует условия второго типа (то есть условия агрегации), следовательно, HAVING
работает правильно.
Как правило, используйте WHERE
перед GROUP BY
и HAVING
после GROUP BY
. Это довольно примитивное правило, но оно полезно в более чем 90% случаев.
Пока вы это делаете, вы можете переписать запрос, используя версию объединения ANSI:
SELECT L.LectID, Fname, Lname
FROM Lecturers L
JOIN Lecturers_Specialization S ON L.LectID=S.LectID
GROUP BY L.LectID, Fname, Lname
HAVING COUNT(S.Expertise)>=ALL
(SELECT COUNT(Expertise) FROM Lecturers_Specialization GROUP BY LectID)
Это исключит WHERE
, которое использовалось как условие тета-соединения .