Forudsat at der ikke er behov for korrelation, skal du bruge:
SELECT a.*
FROM A a
WHERE EXISTS(SELECT NULL
FROM B b
HAVING MIN(b.some_val) > a.val)
Hvis du har brug for korrelation:
SELECT a.*
FROM A a
WHERE EXISTS(SELECT NULL
FROM B b
WHERE b.id = a.id
HAVING MIN(b.some_val) > a.val)
Forklaring
EXISTS SELECT 1/0 ...
og forespørgslen vil stadig fungere, selvom der er en åbenlys division med nul fejl.
Underforespørgslen i EXISTS
bruger den samlede funktion MIN til at få den mindste B.some_val - hvis denne værdi er større end a.val værdien, er a.val mindre end alle b værdierne. Det eneste behov for en WHERE
klausul er til korrelation - aggregerede funktioner kan kun bruges i HAVING
klausul.