2015-11-19 28 views
0

我試圖將sql查詢轉換爲元組關係演算,但有一個NOT EXIST導致我被卡住。將sql轉換爲元組關係演算

SQL查詢:

SELECT num FROM a a1, b b1 
WHERE a1.num = b1.no AND a1.name = "Tim" 
AND NOT EXIST 
    (SELECT * FROM a a2, b b2 
    WHERE a2.num = b2.no AND a2.name = "Tim" 
    AND b2.rating > b1.rating) 

我已經開始:

{ t: num | ∃a1 ∈ a ∃b1 ∈ b [ t(num) = a1(num) ∧ a1.name = "Tim" ∧ ¬∃a2 ∈ a ... 

這就是我卡住了。我如何顯示它是a2b2NOT EXISTS?如果我寫¬∃a2 ∈ a ¬∃b2 ∈ b那麼這將是一個雙重嵌套的SQL查詢,而不是上面列出的那個。

+0

難道你的意思是(你的特定的微積分符號是一致的)'a1(name)=「Tim」'? – philipxy

回答

1

你想不存在a2b2WHERE

SQL表達式

NOT EXISTS (SELECT * FROM a a1, b b2 WHERE ...) 

對應於元組演算表達

¬(∃ a2 ∈ a ∃ b2 ∈ b [...]) 

在SQL有EXISTS一個行中的子查詢,當且僅當存在每其WHERE存在a2b2值,以形成行。所以NOT EXISTS這樣的SQL a2b2對,當它不是有微積分的情況下a2b2其中...