ON KEY子句
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
ON KEY
子句可能会迅速产生歧义,因为复杂连接树中两个表之间的隐式键路径并不总是唯一的。即使是过去有效的查询,也可能会因为向表中添加了新的FOREIGN KEY
约束而停止工作。请谨慎使用此子句!
所有 INNER JOIN、OUTER JOIN、SEMI JOIN、ANTI JOIN 都需要连接谓词。
提供此连接谓词的一种方法是使用 ON KEY
子句,它允许基于它们的 FOREIGN KEY
关系方便地连接两个表,前提是相关的元数据通过 代码生成 为 jOOQ 所知
SELECT * FROM AUTHOR JOIN BOOK ON BOOK.AUTHOR_ID = AUTHOR.ID
create.select() .from(AUTHOR) .join(BOOK).onKey() .fetch();
这个 onKey()
方法有不同的重载。当两个连接表之间没有歧义路径时,上面的方法适用。如果有几个 FOREIGN KEY
声明(例如,一本书有一个 AUTHOR_ID
和一个 CO_AUTHOR_ID
),那么您可以将 org.jooq.ForeignKey
引用传递给该方法,以解决歧义。
SELECT * FROM AUTHOR JOIN BOOK ON BOOK.AUTHOR_ID = AUTHOR.ID
create.select() .from(AUTHOR) .join(BOOK).onKey(Keys.FK_BOOK_AUTHOR) .fetch();
通过使用 FOREIGN KEY
信息在表之间进行连接的类似方法是 隐式 JOIN,它提供了从子表到父表的基于路径的导航表达式。与 ON KEY
语法不同,隐式连接永远不会遇到歧义。
反馈
您对此页面有任何反馈吗? 我们很乐意听到!