От 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') }
Другие вопросы по тегам