在 table 中查找元组对的实例,一列和另一列的列名相同?
Finding instances of pairs of tuples in a table, column names are the same for one column, and for another column?
假设我有一个名为 "TRANSIT" 的 table,其中包含列(city_name、highway_name),它会告诉您哪些高速公路经过城市。
使用关系代数(或 SQL 如果这更容易,我可以将其翻译成 RA),我想 select 所有对的高速公路,它们至少一起穿过两个城市,例如,如果有 A 公路和 B 公路,它们都去 A 城市和 B 城市,我想 select 这两条公路
到目前为止,我只有 select 对高速公路,它们一起穿过一个城市:
πC1.highway_name, C2.highway_name (σ C1.highway_name = C2.highway_name (σ C1.city_name ≠ C2.city_name ( ρ C1 (TRANSIT) X (ρ C2 (TRANSIT)))))
但是,我需要它returns c1.highway_name, c2.highway_name 一起经过两个或多个城市
在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;
祝你好运,将其转化为关系代数的符号。
假设我有一个名为 "TRANSIT" 的 table,其中包含列(city_name、highway_name),它会告诉您哪些高速公路经过城市。
使用关系代数(或 SQL 如果这更容易,我可以将其翻译成 RA),我想 select 所有对的高速公路,它们至少一起穿过两个城市,例如,如果有 A 公路和 B 公路,它们都去 A 城市和 B 城市,我想 select 这两条公路
到目前为止,我只有 select 对高速公路,它们一起穿过一个城市:
πC1.highway_name, C2.highway_name (σ C1.highway_name = C2.highway_name (σ C1.city_name ≠ C2.city_name ( ρ C1 (TRANSIT) X (ρ C2 (TRANSIT)))))
但是,我需要它returns c1.highway_name, c2.highway_name 一起经过两个或多个城市
在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;
祝你好运,将其转化为关系代数的符号。