Как изобразить "не существует" в реляционной алгебре?

Как мне представить SQL-предложение "не существует" в реляционной алгебре?

2 ответа

SQL NOT EXISTS конструкция может быть представлена ​​в реляционной алгебре антисоединением .

Антисоединение L ▹ R двух отношений L а также R выбирает эти кортежи L которые не соединяются ни с одним кортежем в R. Его можно определить в терминах разницы множеств и левого полусоединения следующим образом:

L ▹ R = L - (L ⋉ R).

Я думаю, что вы ищете экзистенциальный квантификатор (∃), который вы могли бы затем отрицать (~ ∃).

Ответ на комментарий: Я не помню большую часть моей реляционной алгебры, но если бы я собирался сделать удар в этом, я бы предположил что-то вроде: σ∃σ (Y)(S). Или, возможно, π∃π (Y)(S); Я не совсем помню, если вы хотите, чтобы выбор или прогноз для этого.

В моем случае я решил эту проблему, переписав запрос,

SELECT *
FROM contactperson
WHERE EXISTS(
   SELECT *
   FROM person
   WHERE contactperson.personId = person.id)

чтобы:

SELECT *
FROM contactperson
WHERE personId = (
   SELECT id
   FROM person
   WHERE contactperson.personId = person.id)

Он возвращает тот же результат и его легче переписать в реляционную алгебру, используя соединение.

Другие вопросы по тегам