关系除法
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
关系代数中有一个操作没有受到太多关注,因为它在实际应用中很少使用。 它是关系除法,是笛卡尔积(或关系乘法)的相反运算。 以下是关系除法的近似定义
Assume the following cross join / cartesian product C = A × B Then it can be said that A = C ÷ B B = C ÷ A
使用 jOOQ,您可以使用以下语法简化关系除法
C.divideBy(B).on(C.ID.eq(B.C_ID)).returning(C.TEXT)
以上大致翻译为
SELECT DISTINCT C.TEXT FROM C "c1" WHERE NOT EXISTS ( SELECT 1 FROM B WHERE NOT EXISTS ( SELECT 1 FROM C "c2" WHERE "c2".TEXT = "c1".TEXT AND "c2".ID = B.C_ID ) )
或者用纯文本表示:在 C 中查找那些 ID 对应于 B 中所有 ID 的 TEXT 值。请注意,从上面的 SQL 语句中,可以立即清楚地看出正确的索引编制至关重要。 请务必在从 on(...) 和 returning(...) 子句引用的所有列上建立索引。
有关关系除法的更多信息和一些很好的实际示例,请参见
反馈
您对此页面有任何反馈吗? 我们很乐意听取您的意见!