假设我有一个Persons
表,其中包含属性{name, pet}
。我如何选择他们拥有各种宠物(dog, cat, bird)
之一的人的名字,但如果他们的宠物在桌子上,那么一个人只有每种宠物中的一种。
示例:Bob, Dog
和Bob, Cat
是表中的唯一行。因此,Bob
拥有各种宠物中的一种。但是在添加Lynda, Bird
的那一刻,Bob
不再拥有每种宠物中的一种。
我认为第一步是π(pet)
。你得到了各种宠物的清单,因为关系代数可以删除重复数据。不知道在此之后该怎么做,但我认为我需要加入π(pet)
和Persons
。
我尝试了一些像Natural Join和Cross产品的东西,但我还没有达到结果而且我没有想法。
答案 0 :(得分:0)
可以使用Division operator:
找到问题的答案人÷π宠物(人)
此关系代数表达式仅返回与name
列的关系,其中包含{{1}中存在目前所有不同种类宠物的人的所有姓名表自己。
除法是一个运算符,在某种意义上,它是乘积运算符的反转(名称完全取自这个事实)。它是一个派生运算符,可以根据投影,集合差异和乘积来定义(例如参见answer)。