如何让我的 SQL 内部连接绕过 table?
How can I make my SQL inner join bypass a table?
我有这四个数据库tables:
civilizations(
civilization_id PRIMARY KEY
civilization_name
civilization_leader
)
cities(
city_id PRIMARY KEY
civilization_id REFERENCES civilizations.civilization_id
city_name
city_population
)
city_buildings(
city_building_id PRIMARY KEY
city_building_name
city_id REFERENCES cities.city_id
building_id REFERENCES buildings.building_id
)
buildings(
building_id PRIMARY KEY
building_name
)
我想写一个 SELECT 语句来显示每个单独建筑物的名称(存储在 city_building_name 中)、建筑物类型(存储在 building_name 中)、名称它所在城市的名称(存储在 city_name 中),以及控制该城市的文明的名称(存储在 civilization_name 中)。
这是我目前得到的:
SELECT city_buildings.city_building_name, buildings.building_name, cities.city_name
FROM city_buildings
INNER JOIN buildings ON city_buildings.building_id = buildings.building_id
INNER JOIN cities ON city_buildings.city_id = cities.city_id
该查询有效并获得了我必填字段的前三个,但我不知道如何获得控制每个城市的文明的名称,因为 city_buildings table 我在 FROM 之后指定的不直接引用文明 table 和其中的 civilization_name 字段,我不知道如何编写一个 INNER JOIN 来绕过城市 table 并从文明 table.
获得我需要的价值
我运行的关系数据库管理系统是MySQL。请将任何完整的答案 post 编辑为适当的回复,而不仅仅是在我的问题 post 下发表评论(但任何问题都可以在评论中提出)。谢谢
您可以使用 cities
table 中的 civilization_id
加入 civilizations
table 并从那里获取文明的名称。
SELECT
cb.city_building_name,
b.building_name,
ct.city_name,
civ.civilization_name
FROM city_buildings cb
INNER JOIN buildings b
ON cb.building_id = b.building_id
INNER JOIN cities ct
ON cb.city_id = ct.city_id
INNER JOIN civ
ON civ.civilization_id = ct.civilization_id
在长连接中,有时使用别名可以提高查询的可读性。
A table reference can be aliased using tbl_name AS alias_name or tbl_name alias_name:
我有这四个数据库tables:
civilizations(
civilization_id PRIMARY KEY
civilization_name
civilization_leader
)
cities(
city_id PRIMARY KEY
civilization_id REFERENCES civilizations.civilization_id
city_name
city_population
)
city_buildings(
city_building_id PRIMARY KEY
city_building_name
city_id REFERENCES cities.city_id
building_id REFERENCES buildings.building_id
)
buildings(
building_id PRIMARY KEY
building_name
)
我想写一个 SELECT 语句来显示每个单独建筑物的名称(存储在 city_building_name 中)、建筑物类型(存储在 building_name 中)、名称它所在城市的名称(存储在 city_name 中),以及控制该城市的文明的名称(存储在 civilization_name 中)。
这是我目前得到的:
SELECT city_buildings.city_building_name, buildings.building_name, cities.city_name
FROM city_buildings
INNER JOIN buildings ON city_buildings.building_id = buildings.building_id
INNER JOIN cities ON city_buildings.city_id = cities.city_id
该查询有效并获得了我必填字段的前三个,但我不知道如何获得控制每个城市的文明的名称,因为 city_buildings table 我在 FROM 之后指定的不直接引用文明 table 和其中的 civilization_name 字段,我不知道如何编写一个 INNER JOIN 来绕过城市 table 并从文明 table.
获得我需要的价值我运行的关系数据库管理系统是MySQL。请将任何完整的答案 post 编辑为适当的回复,而不仅仅是在我的问题 post 下发表评论(但任何问题都可以在评论中提出)。谢谢
您可以使用 cities
table 中的 civilization_id
加入 civilizations
table 并从那里获取文明的名称。
SELECT
cb.city_building_name,
b.building_name,
ct.city_name,
civ.civilization_name
FROM city_buildings cb
INNER JOIN buildings b
ON cb.building_id = b.building_id
INNER JOIN cities ct
ON cb.city_id = ct.city_id
INNER JOIN civ
ON civ.civilization_id = ct.civilization_id
在长连接中,有时使用别名可以提高查询的可读性。
A table reference can be aliased using tbl_name AS alias_name or tbl_name alias_name: