关系代数中 Select 行 "one of each"
Select rows with "one of each" in relational algebra
假设我有一个 Persons
table,属性为 {name, pet}
。我如何 select 拥有每种宠物 (dog, cat, bird)
的人的名字,但是如果他们的宠物在 table 中,那么每个人只有一种宠物。
示例:Bob, Dog
和 Bob, Cat
是 table 中唯一的行。因此,Bob
每种宠物各一只。但是添加 Lynda, Bird
后, Bob
不再有每种宠物。
我认为第一步是π(pet)
。由于关系代数删除了重复项,因此您会得到各种宠物的列表。不知道这之后该怎么做,但我想我需要加入 π(pet)
和 Persons
.
我已经尝试了一些东西,例如 Natural Join 和 Cross 产品,但我还没有得出结果,我没有想法。
可以通过 Division operator:
找到问题的答案
人÷π宠物(人)
这个关系代数表达式 returns 只与列 name
的关系,包含拥有所有不同种类宠物的人的所有姓名目前[=25] =] 存在于 Persons
table 本身。
除法是一个运算符,从某种意义上说,它是乘积运算符的逆运算(名称正是源于这一事实)。它是一个派生运算符,可以根据投影、集差和乘积来定义(例如参见 [=13=])。
假设我有一个 Persons
table,属性为 {name, pet}
。我如何 select 拥有每种宠物 (dog, cat, bird)
的人的名字,但是如果他们的宠物在 table 中,那么每个人只有一种宠物。
示例:Bob, Dog
和 Bob, Cat
是 table 中唯一的行。因此,Bob
每种宠物各一只。但是添加 Lynda, Bird
后, Bob
不再有每种宠物。
我认为第一步是π(pet)
。由于关系代数删除了重复项,因此您会得到各种宠物的列表。不知道这之后该怎么做,但我想我需要加入 π(pet)
和 Persons
.
我已经尝试了一些东西,例如 Natural Join 和 Cross 产品,但我还没有得出结果,我没有想法。
可以通过 Division operator:
找到问题的答案人÷π宠物(人)
这个关系代数表达式 returns 只与列 name
的关系,包含拥有所有不同种类宠物的人的所有姓名目前[=25] =] 存在于 Persons
table 本身。
除法是一个运算符,从某种意义上说,它是乘积运算符的逆运算(名称正是源于这一事实)。它是一个派生运算符,可以根据投影、集差和乘积来定义(例如参见 [=13=])。