>Tables:
Contest(starter, ender, pointsStarter, pointsEnder, debatedate)
Debater(name, club, age)
查询:
提供首发辩手所属的比赛的所有比赛详情 的"柏拉图"俱乐部,并阻止他的对手得分。
我写过的 SQL:
SELECT starter, pointsStarter, ender, pointsEnder, debatedate
FROM contest
WHERE pointsEnder = 0
AND starter IN (SELECT name FROM debater WHERE club = 'Plato')
我写过的关系代数:
Π starter,ender,pointsStarter,pointsEnder,debatedate (
Ϭ Contest.pointsEnder=0 (
Ϭ club=”Plato” (Contest Debater)))
域关系演算我写过:
{< starter,ender,pointsStarter,pointsEnder,debatedate> |
Ǝ < starter,ender,pointsStarter,pointsEnder,debatedate > ϵ Contest (
Ǝ < name,club,age > ϵ Debater (
^ pointsEnder=0 ^ club=”Plato”))
}
明显的错别字:在你的微积分中,在pointsEnder之前有一个错误的^
。你大概打算在你的代数中加入Contest
和Debater
。
你还没有给出你要使用的代数和微积分版本的参考。因此,我们只能猜测修正的可能性质。你不太可能需要Contest.
.
请注意,你的代数和微积分并没有等同于starter和name。如果您的加入是自然的,则需要将name
重命名为starter
Debater
。你最内在的微积分需要一个额外的连词来等同它们。
您不希望通过以下方式删除结果列:
Π starter,ender,pointsStarter,pointsEnder,debatedate (...)
您希望删除非结果列。如果您的加入是自然的,那就是:
Π club, age (...)
同样,微积分查询的结果列必须在右侧表达式中显示为自由(未由 Ǝ 量化)。所以代替:
Ǝ < ... > ϵ Contest (...)
你需要这样的东西:
Ǝ < s,e,ps,pe,dd > ϵ Contest (
s=starter ^ e=ender ^ ps=pointsStarter ^ pe=pointsEnder ^ dd=debatedate
^ ...)