Когда это возможно, в таких случаях я пытаюсь написать логику, которая должна анализировать данные только один раз.вот пара.Точная форма зависит от характера ваших данных (дубликатов и т. Д.) И / или индексов, которые вы имеете или можете создать.
Самый универсальный (все в HAVING MAX(CASE WHEN THEN) = 0
)
SELECT
empID
FROM
yourTable
WHERE
deptId IN (10,11) -- The only two that matter to your logic
GROUP BY
empID
HAVING
MAX(CASE WHEN deptId = 11 THEN 1
WHEN deptId = 10 AND complete = 0 THEN 1
ELSE 0
END) = 0
Более конкретно, менее обобщенно:
SELECT
empID
FROM
yourTable
WHERE
(deptId = 10 AND completed = 1)
OR
(deptId = 11)
GROUP BY
empID
HAVING
MAX(deptId) = 10