No tak – mają być wszystkie. Wobec tego biję się w piersi, rzeczywiście moje zapytanie nie daje poprawnego wyniku.
Mimo wszystko napisałbym to inaczej:
SELECT id_process
FROM task
WHERE status = 'completed'
GROUP BY id_process
EXCEPT
SELECT id_process
FROM task
WHERE status <> 'completed'
GROUP BY id_process
To zapytanie wciąż będzie szybsze w planie wykonania od Twojego.
… reply
Nie jestem do końca przekonany, czy będzie szybsze. Nawet jeżeli tak, to najprawdopodobniej
SELECT DISTINCT id_process AS p1 FROM task
WHERE status = 'completed' AND
NOT EXISTS (SELECT * FROM task WHERE status <> 'completed' AND id_process = p1);
będzie jeszcze szybsze. Ale to nie o to chodzi.
… reply
Tomasz Trojanowski mieszka w Łańcucie, wraz z żoną Iwoną i synami Jakubem i Arkadiuszem. Pracuje jako administrator serwerów internetowych. W wolnych chwilach zajmuje się projektem PLD/FreeBSD.