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

NATURAL子句

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

NATURAL KEY 操作符可能会迅速产生歧义,因为复杂连接树中两个表之间的列名并不总是唯一的,也不应该包含在 JOIN 谓词中(例如,LAST_UPDATE 或其他技术列,存在于每个表中)。这种情况甚至可能发生在过去有效的查询中,但由于向表中添加了新列,将停止工作。实际上,很难设计一个允许使用 NATURAL JOIN 的模式。请谨慎使用此子句!

INNER JOINOUTER JOINSEMI JOINANTI JOIN 都需要连接谓词。

提供此连接谓词的一种方法是 NATURAL 子句,它的工作方式类似于 USING 子句,只不过它从表元数据中隐式地发现共享的列名。假设我们将 AUTHOR.ID 列称为 AUTHOR.AUTHOR_ID 代替。

SELECT *
FROM AUTHOR
NATURAL JOIN BOOK
 
create.select()
      .from(AUTHOR)
      .naturalJoin(BOOK)
      .fetch();

即使在简单的连接树中也存在很高的歧义风险,这就是为什么很少使用此语法的原因。它与 FULL JOIN 结合使用以形成 NATURAL FULL JOIN 可能在极少数情况下有用,这可以在两个行类型之间创建一种 SQL 风格的未标记联合类型。对于日常使用来说有点深奥。

反馈

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

The jOOQ Logo