嗨,我是数据库和关系代数的新手。我想知道是否有一种方法可以使用具有相同键但值不同的关系代数从表中删除元组。
例如,我只想保留 [1, 5] 和 [4, 9] 但删除其他所有内容。
Key | Value
-------|-------
1 | 5
2 | 6
2 | 7
2 | 8
4 | 9
谢谢。
嗨,我是数据库和关系代数的新手。我想知道是否有一种方法可以使用具有相同键但值不同的关系代数从表中删除元组。
例如,我只想保留 [1, 5] 和 [4, 9] 但删除其他所有内容。
Key | Value
-------|-------
1 | 5
2 | 6
2 | 7
2 | 8
4 | 9
谢谢。
我会执行以下操作(请参见此处的小提琴):
创建并填充表:
接着:
结果:
然后运行以下 SQL:
结果:
这是期望的结果。我使用过 PostgreSQL——我建议你用来学习关系数据库原理的开源数据库——它具有非常高的标准合规性,是一个很好的学习工具。
SQL的内循环
产生那些只有 1
key
的 sCOUNT
(在这种情况下,整数 1 和 4),然后外部循环选择value
对应于这两个整数的 s(参见小提琴)。书中描述了关系代数的许多变体和扩展。我假设你有一个 group by 运算符,它是经典关系代数的扩展,它写成:
a 1 ... a n γ f 1 ...f m
其中每个 a i是一个分组属性,而 f i是一个聚合函数。
使用此运算符,您的查询可以通过以下表达式回答(假设您的关系名称是 R):
R ⨝ π Key (σ COUNT(*)=1 ( Key γ COUNT(*) (R)))
首先,我们按 Key 分组并只保留具有唯一值的组,然后我们对 R 本身执行自然连接以仅维护只有一个 Key 值的元组。