在表中查找元组对的实例,列的名称对于一列和另一列是相同的吗?

时间:2015-10-13 02:06:53

标签: sql relational-algebra

我们说我有一个名为" 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,它们一起经过两个或多个城市

1 个答案:

答案 0 :(得分:0)

在SQL中,您可以使用joingroup 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;

祝你好运,将其转化为关系代数的符号。