SQL 跨表列出没有主键的列的函数
SQL function to list a column across tables without primary key
我有一个 table 列表状态和一个城市列表,其中 State_number 作为城市 table 中的外键。是否可以通过州名列出城市?
这是我得到的最接近的:
SELECT State_name, City_name
FROM States, Cities
JOIN Cities on States.State_number = Cities.State_number
WHERE States.State_name IN ('Munich', 'Brandenburg');
当前输出示例:
State_name
City_name
Bavaria
Munich
Bavaria
Nuremburg
Brandenburg
Berlin
而我希望的是:
Munich
7
Brandenburg
10
加入他们并应用 WHERE 子句:
select st.state_name, c.city_name
from states s
join cities c on s.state_number = c.state_number
where s.state_name = 'Bavaria';
要获取每个州的城市数量(这不是原始问题的一部分),您可以使用 group by
select st.state_name, count(*) as number_of_cities
from states s
join cities c on s.state_number = c.state_number
where s.state_name in ('Brandenburg','Bavaria')
group by st.state_name;
我认为你想要:
SELECT s.State_name, c.City_name
FROM States s JOIN
Cities c
ON s.State_number = c.State_number
WHERE c.City_name IN ('Munich', 'Brandenburg');
备注:
- 从不 在
FROM
子句中使用逗号。
- 始终使用正确、明确、标准、可读的
JOIN
语法。
- 使用table别名!并限定所有列引用!
- 您的过滤器应该基于城市名称而不是州名称。我认为这是您的查询版本的根本问题。
我有一个 table 列表状态和一个城市列表,其中 State_number 作为城市 table 中的外键。是否可以通过州名列出城市?
这是我得到的最接近的:
SELECT State_name, City_name
FROM States, Cities
JOIN Cities on States.State_number = Cities.State_number
WHERE States.State_name IN ('Munich', 'Brandenburg');
当前输出示例:
State_name
City_name
Bavaria
Munich
Bavaria
Nuremburg
Brandenburg
Berlin
而我希望的是:
Munich
7
Brandenburg
10
加入他们并应用 WHERE 子句:
select st.state_name, c.city_name
from states s
join cities c on s.state_number = c.state_number
where s.state_name = 'Bavaria';
要获取每个州的城市数量(这不是原始问题的一部分),您可以使用 group by
select st.state_name, count(*) as number_of_cities
from states s
join cities c on s.state_number = c.state_number
where s.state_name in ('Brandenburg','Bavaria')
group by st.state_name;
我认为你想要:
SELECT s.State_name, c.City_name
FROM States s JOIN
Cities c
ON s.State_number = c.State_number
WHERE c.City_name IN ('Munich', 'Brandenburg');
备注:
- 从不 在
FROM
子句中使用逗号。 - 始终使用正确、明确、标准、可读的
JOIN
语法。 - 使用table别名!并限定所有列引用!
- 您的过滤器应该基于城市名称而不是州名称。我认为这是您的查询版本的根本问题。