NATURAL子句
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
NATURAL KEY操作符可能会迅速产生歧义,因为复杂连接树中两个表之间的列名并不总是唯一的,也不应该包含在JOIN谓词中(例如,LAST_UPDATE或其他技术列,存在于每个表中)。这种情况甚至可能发生在过去有效的查询中,但由于向表中添加了新列,将停止工作。实际上,很难设计一个允许使用NATURAL JOIN的模式。请谨慎使用此子句!
INNER JOIN、OUTER JOIN、SEMI JOIN 和 ANTI 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 风格的未标记联合类型。对于日常使用来说有点深奥。
反馈
您对此页面有任何反馈吗? 我们很乐意听取您的意见!