jOOQ "IN" predicado con grado n tuplas

JJ Zabkar:

Necesito una WHEREcláusula para comprobar tuplas INuna 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 referenceOrderIdLineNumbersni 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();
Lee Marlow:

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:

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();

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=176477&siteId=1
Recomendado
Clasificación