0

我正在尝试将 sql 查询转换为元组关系演算,但是有一个NOT EXIST导致我被卡住的问题。

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 ...

这就是我卡住的地方。我如何证明它NOT EXISTS来自a2and b2?如果我写¬∃a2 ∈ a ¬∃b2 ∈ b,那么这将是一个双重嵌套的 sql 查询,而不是上面列出的那个。

4

1 回答 1

3

您希望那里不存在a2并且b2根据WHERE.

SQL 表达式

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

对应元组演算表达式

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

在 SQLEXISTS中,子查询中有一行当且仅当存在a2并且b2每个其值WHERE以形成该行。因此,当没有微积分和where的情况下,NOT EXISTS这样的 SQLa2加对。b2a2b2...

于 2015-11-21T08:23:15.680 回答