Compare this row value expression with a set of row value expressions for
equality.
Row NOT IN predicates can be emulated in those databases that do not
support such predicates natively:
(A, B) NOT IN ((1, 2), (3, 4))
is equivalent to
NOT(((A, B) = (1, 2)) OR ((A, B) = (3, 4)))
, which is
equivalent to NOT((A = 1 AND B = 2) OR (A = 3 AND B = 4))
Note that generating dynamic SQL with arbitrary-length
NOT IN
predicates can cause cursor cache contention in some
databases that use unique SQL strings as a statement identifier (e.g.
SQLDialect#ORACLE). In order to prevent such problems, you could
use
Settings#isInListPadding() to produce less distinct SQL
strings (see also
[#5600]), or you
could avoid IN
lists, and replace them with:
NOT IN
predicates on temporary tables
NOT IN
predicates on unnested array bind variables