可用版本: Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

JOIN运算符

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

jOOQ 支持许多不同类型的标准和非标准 SQL JOIN 操作。所有这些 JOIN 方法都可以在 org.jooq.Table 类型上调用(更多信息请参阅 连接表部分),或者为了方便起见,直接在 FROM 子句之后调用。以下示例连接了 AUTHOR 和 BOOK

DSLContext create = DSL.using(connection, dialect);

// Call "join" directly on the AUTHOR table
Result<?> result = create.select()
                         .from(AUTHOR.join(BOOK)
                                     .on(BOOK.AUTHOR_ID.eq(AUTHOR.ID)))
                         .fetch();

// Call "join" on the type returned by "from"
Result<?> result = create.select()
                         .from(AUTHOR)
                         .join(BOOK)
                         .on(BOOK.AUTHOR_ID.eq(AUTHOR.ID))
                         .fetch();

两种语法将产生相同的 SQL 语句。但是,在 org.jooq.Table 对象上调用 "join" 允许更强大的嵌套 JOIN 表达式(如果您可以处理括号)

SELECT *
FROM AUTHOR
LEFT OUTER JOIN (
  BOOK JOIN BOOK_TO_BOOK_STORE
       ON BOOK_TO_BOOK_STORE.BOOK_ID = BOOK.ID
)
ON BOOK.AUTHOR_ID = AUTHOR.ID
 
// Nest joins and provide JOIN conditions only at the end
create.select()
      .from(AUTHOR
      .leftOuterJoin(BOOK
        .join(BOOK_TO_BOOK_STORE)
        .on(BOOK_TO_BOOK_STORE.BOOK_ID.eq(BOOK.ID)))
      .on(BOOK.AUTHOR_ID.eq(AUTHOR.ID)))
      .fetch();

有关不同连接类型的更多信息,请参阅连接表部分

反馈

您对此页面有任何反馈吗?我们很乐意听取您的意见!

The jOOQ Logo