2015-10-13 3 views
0

Предположим, у меня есть таблица под названием «TRANSIT» с колонками (city_name, highway_name), и она рассказывает вам, какие магистрали проходят через город.Поиск экземпляров пар кортежей в таблице, имена столбцов одинаковы для одного столбца, а для другого столбца?

Использование реляционной алгебры (или SQL, если это проще, и я могу перевести ее в RA), я хочу выбрать все пары автомагистралей, которые проходят по крайней мере из двух городов вместе, например, если есть шоссе A, и шоссе B, и они оба идут города а и City B, я хочу, чтобы выбрать эти два шоссе

То, что я до сих пор, только выбирая пары автомобильных дорог, которые проходят через один город вместе:

πC1.highway_name, C2.highway_name (σ C1.highway_name = C2.highway_name (σ C1.city_name ≠ C2.city_name (ρ C1 (TRANSIT) X (ρ C2 (TRANSIT))))) 

Однако, мне нужно, чтобы оно возвращало c1.highway_name, c2.highway_name, которые проходят через два или более городов вместе

ответ

0

В SQL, вы можете подсчитать количество городов, два шоссе разделяют с помощью join и group by:

select hc1.highway, hc2.highway, count(*) as NumInCommon 
from highwaycity hc1 join 
    highwaycity hc2 
    on hc1.city = hc2.city and 
     hc1.highway < hc2.highway 
group by hc1.highway, hc2.highway 
having count(*) >= 2; 

Успехов перевод этого к обозначениям реляционной алгебры.

+0

классно спасибо за это, я думаю, вы не можете использовать count в RA, но мне удалось найти решение, используя 3 декартовых произведения, вместо одного – seedkey

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