Necesito una WHERE
cláusula para comprobar tuplas IN
una lista: (field1, field2) in (('1', 1), ('2', 2), ('3', 3))
. Esto es válido en Postgres SQL.
Dialecto: POSTGRES
jOOQ Versión: 3.9.6
¿Cuál es la sintaxis correcta para jOOQ este caso?
jOOQ 3.9 documentación, esto es posible, pero su ejemplo sólo da grado 1: https://www.jooq.org/doc/3.9/manual/sql-building/conditional-expressions/in-predicate-degree-n/
Este código da una aproximación de lo que estoy buscando, pero no puede obtener el tipo de datos / derecha para referenceOrderIdLineNumbers
ni puedo obtener el SQL generado por la derecha 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();
Esto funciona según lo previsto por mí. Usted puede tratar de tener jOOQ ingrese el código SQL de su generación para usted e intente ejecutar dicho SQL contra la base de datos directamente.
referencias:
- https://www.jooq.org/doc/3.9/manual/sql-execution/logging/
- https://www.jooq.org/doc/3.9/manual/sql-building/conditional-expressions/in-predicate-degree-n/
Collection<Row2<String, Integer>> field1Field2Collection = new LinkedList<>();
field1Field2Collection.add(row("1", 1));
field1Field2Collection.add(row("2", 2));
field1Field2Collection.add(row("3", 3));
Result<Record2<String, Integer>> field1Field2Results = dsl
.select(Tables.TABLE1.FIELD1, Tables.TABLE2.FIELD2)
.from(Tables.TABLE1)
.join(Tables.TABLE2).on(Tables.TABLE2.PK1.eq(Tables.TABLE1.PK1))
.where(row(Tables.TABLE1.FIELD1, Tables.TABLE2.FIELD2).in(field1Field2Collection))
.fetch();