【问题标题】:Convert sql to tuple relational calculus将sql转换为元组关系演算
【发布时间】:2015-11-19 11:09:46
【问题描述】:

我正在尝试将 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 ...

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

【问题讨论】:

  • 你不是说(为了让你的特定微积分符号保持一致)a1(name) = "Tim"

标签: sql tuples tuple-relational-calculus


【解决方案1】:

根据WHERE,您希望不存在a2b2

SQL 表达式

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

对应元组演算表达式

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

在 SQL 中,EXISTS 子查询中有一行当且仅当存在 a2b2 值每个其 WHERE 以形成该行。所以NOT EXISTS 这样的SQL a2 加上b2 对,当不是有演算a2b2 的情况下...

【讨论】:

    猜你喜欢
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多