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别名!并限定所有列引用!
  • 您的过滤器应该基于城市名称而不是州名称。我认为这是您的查询版本的根本问题。