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 风格的未标记联合类型。对于日常使用来说有点深奥。
反馈
您对此页面有任何反馈吗? 我们很乐意听取您的意见!