Чтобы значение NOT EXISTS ( SELECT ...)
было истинным, SELECT ...
не должно возвращать результатов.
Вы хотите создать заявление SELECT
, которое будет возвращать любому сотруднику с зарплатой выше, чем менеджер, указанный для отдела (ов), в котором он работает. Посмотрите, можете ли вы написать этот запрос, а затем поместить его в NOT EXISTS
Я не совсем уверен, что вы написали даже допустимый SQL, но это, конечно, не то, что вы хотите. У меня есть потенциальный ответ для вас, но так как это было отмечено домашней работой, я хотел бы попытаться подтолкнуть вас в правильном направлении, прежде чем дать полный ответ.
Как сказал ОП, домашнее задание сдано ...
CREATE ASSERTION managerComplex
CHECK
(NOT EXISTS (SELECT E.salary
FROM Emp M, Dept D, Works W, Emp E
WHERE M.eid = D.managerid AND
W.did = D.did AND
E.eid = W.eid AND
E.salary > M.salary))
Мой NOT EXISTS
имеет запрос внутри него, который будет возвращать результаты, если зарплаты сотрудников выше, чем зарплаты их соответствующих менеджеров. Я смотрю на всех сотрудников, которые работают в отделе, и включаю их в набор результатов только в том случае, если их зарплата выше, чем у менеджера по зарплате этого отдела.
Я даже не уверен, что ваш SQL действителен, так как у вас есть (SELECT ...) <= (SELECT ...) AND ...
. Сравнение наборов результатов с <=
не имеет никакого смысла для меня. Возможно, это просто SQL, который я никогда не использовал, но ... я никогда не использовал его.