如何在关系代数中表示SQL“not exists”子句?
答案 0 :(得分:0)
我认为你正在寻找existential quantifier(∃),然后你可以否定(〜∃)。
对评论的回应:我不记得我的大多数关系代数,但是如果我要对它进行一次尝试,我会猜测:σ something σ(Y)子>(S)。或者可能是π∃π(Y)(S);我不太记得你是否想要选择或投影。
答案 1 :(得分:-1)
在我的情况下,我通过重写查询解决了这个问题,
SELECT *
FROM contactperson
WHERE EXISTS(
SELECT *
FROM person
WHERE contactperson.personId = person.id)
为:
SELECT *
FROM contactperson
WHERE personId = (
SELECT id
FROM person
WHERE contactperson.personId = person.id)
它返回相同的结果,并且更容易使用连接重写为关系代数。
答案 2 :(得分:-1)
SQL NOT EXISTS
的构造可以通过反联接▹
在关系代数中表示。
两个关系L ▹ R
和L
的反联接R
选择L
的那些不与R
中的任何元组联接的元组。可以根据集差异和左半连接定义如下:
L ▹ R = L - (L ⋉ R).