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の両方からのものであることをどのように示すのですか? 私が書くと、これは二重にネストされたSQLクエリになり、上記のものではなくなります。a2b2¬∃a2 ∈ a ¬∃b2 ∈ b

4

1 に答える 1

3

存在しないようにしa2b2WHERE.

SQL式

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

タプル微積分式に対応

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

SQL ではEXISTS、サブクエリに行が存在する場合にのみ、その行を形成するための値が存在a2します。したがって、微積分とwhereがある場合ではない場合、そのような SQLとペア。b2WHERENOT EXISTSa2b2a2b2...

于 2015-11-21T08:23:15.680 に答える