我们说我有一个名为" TRANSIT"的表,其中包含列(city_name,highway_name),它会告诉您通过城市的高速公路。
使用关系代数(或SQL,如果这更容易,我可以将其转换为RA),我想选择所有高速公路对,例如,如果有高速公路A,则通过至少两个城市, B高速公路,他们都去了A市和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 :(得分: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;
祝你好运,将其转化为关系代数的符号。