为了账号安全,请及时绑定邮箱和手机立即绑定

具有 N 次元组的 jOOQ“IN”谓词

具有 N 次元组的 jOOQ“IN”谓词

芜湖不芜 2022-11-30 16:17:20
我需要一个WHERE子句来检查元组IN列表:(field1, field2) in (('1', 1), ('2', 2), ('3', 3))。这是 Postgres 中的有效 SQL。方言:POSTGRESjOOQ版本: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也无法获得 jOOQ 生成的正确 SQL。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();
查看完整描述

1 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

这是为我设计的。您可以尝试让 jOOQ 记录它为您生成的 SQL,并尝试直接针对您的数据库运行所述 SQL。


参考:


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


查看完整回答
反对 回复 2022-11-30
  • 1 回答
  • 0 关注
  • 111 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信