假设我有两张桌子A{int m}
and B{int m}
我必须找到最大值m在使用关系代数的两个表之间,但我不能使用 max 函数。我该怎么做?我认为使用 join 我们可以做到这一点,但我不确定我的猜测是否正确。
Note:这是一个面试问题。
嗯,我很困惑为什么这个问题涉及两个表。对于所提出的问题,我只需将两者联合起来(就像 StilesCrisis 所做的那样),然后求解单个表。
那么:如何仅使用 NatJOIN 找到表中的最大 m 呢?这是在包含层次结构的表上查找顶部节点的简化版本(想想程序集/组件爆炸或组织结构图)。
关键思想是我们需要将表“复制”到具有不同属性名称的内容中,以便我们可以成对比较元组。 (因此,这将使用 NatJOIN 的简并形式,即叉积)。请参阅此处的示例如何用关系代数求 MAX? https://stackoverflow.com/questions/5493691/how-can-i-find-max-with-relational-algebra?rq=1
A NOT MATCHING
((A x (A RENAME m AS mm)) WHERE m < mm)
减数是所有 m 小于其他元组的元组。反连接是除那些以外的所有元组——即 MAX。 (我认为使用 NOT MATCHING 比 MINUS 更容易理解,并且不需要关系与 UNION 兼容。它大致相当于 SQL NOT EXISTS)。)
[我使用了教程 D 语法,以避免弄乱希腊字母。]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)