Sql 在表中查找成对元组的实例时,一列和另一列的列名是否相同?

Sql 在表中查找成对元组的实例时,一列和另一列的列名是否相同?,sql,relational-algebra,Sql,Relational Algebra,假设我有一个名为“TRANSIT”的表,表中有列(city_name,highway_name),它告诉你们穿过一个城市的公路是什么 使用关系代数(或者SQL,如果更简单的话,我可以将其转换为RA),我想选择所有公路对,它们至少一起穿过两个城市,例如,如果有公路A和公路B,它们都经过城市A和城市B,我想选择这两条公路 到目前为止,我只选择了两条公路,它们一起穿过一个城市: πC1.highway_name, C2.highway_name (σ C1.highway_name = C2.high

假设我有一个名为“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\u name,c2.highway\u name,它们一起穿过两个或多个城市

在SQL中,您可以使用
join
groupby
计算两条公路共享的城市数:

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;
选择hc1.highway、hc2.highway,将(*)计数为NumInCommon
从highwaycity hc1加入
公路城市hc2
关于hc1.city=hc2.city和
hc1.公路

祝您好运,将此转换为关系代数的符号。

很酷,谢谢您,我想您不能在RA中真正使用计数,但我设法找到了一个解决方案,使用了3个笛卡尔乘积,而不是1个