От SQL к кортежу реляционного исчисления с помощью Join
У меня есть два SQL-запроса, которые мне нужно преобразовать в реляционное исчисление кортежей. Первый запрос
SELECT immobilie.*
FROM immobilie
WHERE 'Preis'<'100000'
кажется довольно очевидным (если я правильно понял):
{w|w ϵ MAKLER ∧ w.Preis < `100000‘}
Но второй:
SELECT makler.*
FROM makler
JOIN immobilie
ON makler.MaklerID = immobilie.angebotenVon
WHERE immobilie.Typ = 'Wohnung'
есть объединение, и я не смог найти хороший пример того, как мне нужно было бы преобразовать его. Может ли кто-нибудь помочь мне с объяснением?
2 ответа
Большинство материалов по TRC, кажется, в формате PDF. Это может быть связано с интенсивно используемыми символами. Согласно этой презентации на Berkeley CS 106 это должно работать:
{m|m ϵ MAKLER ∧ ∃i(i ϵ IMMOBILIE ∧ i.Typ = `Wohnung‘ ∧ i.angebotenVon = m.MaklerID)}
По сути, условие состоит в том, что элемент должен существовать в другом запросе: для каждого кортежа, взятого из MAKLER
убедитесь, что кортежи существуют IMMOBILIE
который имеет Typ
равно 'Wohnung'
а также angebotenVon
равно MaklerID
рассматриваемого кортежа.
К сожалению, у меня нет возможности проверить это в данный момент.
Вам просто нужно преобразовать JOIN в CROSS JOIN и переместить условие в предложение WHERE. Тогда легко получить перевод TRC:
{ w | ∃i (w ϵ MAKLER ∧ i ϵ IMMOBILIE ∧ w.MaklerID = i.angebotenVon ∧ i.Typ = 'Wohnung') }