Как изобразить "не существует" в реляционной алгебре?
Как мне представить 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)
Он возвращает тот же результат и его легче переписать в реляционную алгебру, используя соединение.