如果元组仅存在于约束的所有出现中,则查找元组

Finding tuples if it only exists in all occurrences of a constraint

数据库(所有条目均为整数):

ID | BUDGET
1  | 20
8  | 20
10 | 20
5  | 4
9  | 4
10 | 4
1  | 11
9  | 11

假设我的约束条件是预算 >= 10。 在这种情况下,我只想 return ID 为 1。我该怎么做? 我尝试在 selecting budget >= 10 和 returning if id1 = id2 and budget1 <> budget2 之后取其自身的叉积,但这在只有 1 个预算的情况下不起作用即 >= 10。(下面的 EG)

ID | BUDGET
1  | 20
8  | 20
10 | 20
1  | 4
5  | 4
9  | 4
10 | 4
9  | 4

如果我按照我在第一个示例中所做的那样做,则不会 return 编辑任何内容,因为 budget1 <> budget2 将导致空 table。

EDIT1:我只能用关系代数来解决这个问题。所以SQL的存在,where和count关键字不能用

Edit2:仅项目,select,重命名,设置差异,设置并集,左连接,右连接,完全内连接,自然连接,允许设置交集和叉积

这个问题我不是很清楚。如果要return所有预算大于10且没有预算小于10的ID,表达式简单如下:

π(ID)(σ(BUDGET>=10)(R)) - π(ID)(σ(BUDGET<10)(R))

另一方面,如果您想要所有 ID 关系中存在的所有预算且大于 10,那么我们必须使用 ÷ 运算符:

R ÷ π(BUDGET)(σ(BUDGET>=10)(R))

从您的评论来看,第二种情况是正确的。让我们看看如何根据定义计算除法(应用于两个泛型关系 R(A) 和 S(B)):

R ÷ S = πA-B(R) - πA-B((πA-B(R) x S) - R)

其中 R 是原始关系,

S = π(BUDGET)(σ(BUDGET>=10)(R)),

即:

BUDGET
------
20
11

从内部表达式开始:

πA-B(R)等于πID(R)=

ID
--
1
5
8
9
10

则 πA-B(R) x S) 为:

ID BUDGET
---------
 1  20
 1  11
 5  20
 5  11
 8  20
 8  11
 9  20
 9  11
10  20
10  11

那么 ((πA-B(R) x S) - R) 是:

ID BUDGET
---------
 5  20
 5  11
 8  11
 9  20
10  20

则 πA-B((πA-B(R) x S) - R) 为:

ID
__
 5
 8
 9
10

最后,从 πA-B(R) 中减去这个关系,我们得到结果:

ID
--
 1