是否有任何数据库引擎将基于现有外键来初始化联接条件?


11

对我来说,似乎很奇怪,当我定义了一个外键时,引擎无法使用此信息来自动找出正确的JOIN表达式,而是要求我重新键入相同的子句。是否有任何数据库,也许是某种研究项目,可以检查现有的外键?

Answers:


4

我不知道有谁使用外键(如果您有多个外键返回同一张表,那可能会很混乱)

但是,如果您未指定特定的联接类型或联接条件,或者您使用的是Oracle,Oracle将以列名称为基础进行联接NATURAL JOIN


如果您在同一张表中有多个外键,那为什么会很混乱?如果您是从“父”表的角度看它,它仍然应该清楚在你感兴趣的孩子什么记录。
贝丝Whitezel

@Bitoff您可能在两个表之间有多个关系,因此不是一个复合键,实际上是子表的多个外键。例如,在上一份工作中,我们有一个组织数据库,在该表中有两个指向我的人员表的链接-部门主管和主要联系人(通常是秘书)。在将工作人员分配到一个部门之前,存在一个相反的方向的外键,直到我们不得不将其拆分以支持多对多关系为止。

我知道没有一个普通的RDBMS会这样做-正如问题所指出的,我把问题放在那儿看看是否有人听说过该领域的新内容。
TML

1
-1这与Oracle的行为不对,您也未链接到您的答案。正如Gary所指出的那样(您的回答的第三条评论),“ natural join从未成为默认值”。顺便说一句,汤姆·凯特(Tom Kyte)肯定会natural join
说出

4

真的很酷,如果我能写这个

from calendar join table1

dbms将知道需要对此进行评估。

from calendar
left join table1 on (work_date between (cal_date - 13) and cal_date)

真的很酷。但是,并非每个联接都是等联接

FWIW,NATURAL JOIN在SQL标准中。但我敢肯定,过去25年没有使用过它。

如果您发现自己一遍又一遍地编写相同的join子句,也许您只需要更多视图。


3

如果您担心输入,那么您的编辑器会自动选择实用程序以自动建议适当的联接语句。RedGate的SQL提示,用于在SSMS和Visual Studio中处理SQL Server。我相信Quest的TOAD将处理Oracle和其他一些更流行的RDMS。


没有真正的“担忧”,只是想知道这是否是任何人都在寻求解决的问题。
TML

@TML我怀疑有人担心这个问题,因为据我所知这确实属于应用程序逻辑领域(其中应用程序逻辑是与运行数据库服务器无关的事情,我们得到报酬的事情)
jcolebrand
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.