Мне нужно предложение WHERE
для проверки кортежей IN
списка: (field1, field2) in (('1', 1), ('2', 2), ('3', 3))
. Это действительный SQL в Postgres.
Диалект: POSTGRES
JOOQ Версия: 3.9.6
Каков правильный синтаксис jOOQ для этого случая?
Документация jOOQ 3.9 подразумевает, что это возможно, но их пример дает только степень 1: https://www.jooq.org/doc/3.9/manual/sql-building/conditional-expressions/in-predicate-degree-n/
Этот код приблизительно соответствует тому, что я ищу, но я не могу получить правильный тип / данные для referenceOrderIdLineNumbers
и не могу получить правильный SQL, сгенерированный jOOQ.
Collection<Row2<String, Integer>> referenceOrderIdLineNumbers = ...
List<Object[]> rows = dsl.select(... , field("count(TABLE3)", Integer.class )
.from(Tables.TABLE1)
.join(Tables.TABLE2).on(Tables.TABLE2.PK1.eq(Tables.TABLE1.PK1))
.join(Tables.TABLE3).on(Tables.TABLE3.PK2.eq(Tables.TABLE2.PK2))
.where(
row(Tables.TABLE1.FIELD1, Tables.TABLE2.FIELD2) // <-- what to
.in(referenceOrderIdLineNumbers) // <-- do here??
)
.groupBy(...)
.fetch();