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();
- 请参阅关于 条件表达式 的部分,了解更多关于在 jOOQ 中创建
org.jooq.Condition对象的多种方法。 - 请参阅关于 表表达式 的部分,了解关于在 jOOQ 中引用
org.jooq.Table对象的各种方法。
有关不同连接类型的更多信息,请参阅连接表部分。
反馈
您对此页面有任何反馈吗?我们很乐意听取您的意见!