说我有以下关系模式:
+-------+------------+
| Name | Subject |
+--------------------+
| 1 | A |
| 1 | B |
| 1 | C |
| 2 | D |
| 2 | E |
| 3 | F |
| 4 | G |
| 5 | H |
| 5 | I |
+-------+------------+
应该返回元组
3
4
基本上只需要为1个主题的人提供唯一的名称。
感谢。
答案 0 :(得分:1)
这是一个基于AntC描述的示例:
NS={
name:string, subject:string
'1' , 'A'
'1' , 'B'
'1' , 'C'
'2' , 'D'
'2' , 'E'
'3' , 'F'
'4' , 'G'
'5' , 'H'
'5' , 'I'
}
(π name NS) - π name (σ s!=subject ((ρ s←subject NS) ⨝ NS))
如果要进行测试,可以尝试以下方法:
答案 1 :(得分:0)
Choc Boo,欢迎您使用stackoverflow [relational-algebra]。我强烈建议您找到适合自己的教科书或在线学习资源,以逐步进行学习,最好与其他学习者分享。
您确定要学习RA吗?还是SQL?它们是非常不同的:作为一个菜鸟,学习一个可能会完全混淆另一个。 (除非您深入了解,否则它们之间的联系将变得不清楚。)
有些地方可以在线运行RA。但是请注意,他们使用的是RA的特定方言,这可能不是您要尝试学习的方言。
您的查询可能表示为:
“返回出现在单个元组中的所有Name
。”
请注意,我没有提及“仅做1个主题”:关系是集合;如果任何Name
出现不止一次,则必须以多个Subject
出现。
有一种“快速而肮脏的”答案:对每个Name
计数多少个元组;限制结果只返回count == 1的结果。(这样,将需要使用高级RA运算符进行计数。)
有一个漫长的方法,它只使用更多的原始运算符:取两个版本的关系;将每个元组与另一个版本中的每个配对出现在多个元组中的Name
将以相同的方式{Name
-不同的Subject
配对;这些是您不想要的Name
。
“两个版本”是什么意思?了解有关重命名操作(ρ
)的信息。 “与……配对”是什么意思?了解加入操作(⋈
)。 “不想要”是什么意思?了解集合差运算符(-
):我说关系是集合。