2015-11-19 9 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 ... 

это где я застрял. Как я могу показать, что это NOT EXISTS от a2 и b2? Если я напишу ¬∃a2 ∈ a ¬∃b2 ∈ b, тогда это будет дважды вложенный sql-запрос, а не тот, который указан выше.

+0

Вы не имеете в виду (для того, чтобы ваша конкретная нотация была последовательной) 'a1 (name) =« Tim »'? – philipxy

ответ

1

Вы хотите, чтобы там не было a2 и b2 за WHERE.

выражение SQL

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

соответствует кортеж выражение: Исчисление

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

В SQL там EXISTS строку в подзапросу тогда и только тогда, когда существуют a2 и b2 значения согласно его WHERE с образованием, что ряд. Итак, NOT EXISTS такой SQL a2 plus b2 пара, когда это не так, что есть исчисление a2 и b2 где ....

 Смежные вопросы

  • Нет связанных вопросов^_^