mysql - 如何使我的 SQL 内部联接绕过表?

标签 mysql sql relational-database inner-join

我有这四个数据库表:

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

该查询有效并获得了我必填字段的前三个,但我不知道如何获得控制每个城市的文明的名称,因为我在 FROM 之后指定的 city_buildings 表没有我没有直接引用带有 civilization_name 字段的 civilizations 表,我不知道如何编写一个 INNER JOIN 来绕过 cities 表并从 civilizations 表中获取我需要的值。

我运行的关系数据库管理系统是MySQL。请将任何完整的答案作为适当的回复发布,而不仅仅是在我的问题帖子下发表评论(但任何问题都可以在评论中提出)。谢谢。

最佳答案

您可以使用 cities 表中的 civilization_id 连接到 civilizations 表并从那里获取文明的名称。

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:

https://dev.mysql.com/doc/refman/5.7/en/join.html

关于mysql - 如何使我的 SQL 内部联接绕过表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48909792/

相关文章:

php - 无法使用 NodeMCU 向服务器发送 POST 请求

mysql - 返回最高 'views' 和特定 id 的 'views' 的 SELECT

python - 如何在 3 个表上的 SQLAlchemy 中执行 JOIN,其中一个在其他两个表之间进行映射?

mysql - 在 SQL 中设计灵活的模式设计

php pdo函数连接到数据库并进行查询

mysql - 检索一个表的相同列以获取另一个表中的 2 个不同列

mysql - 如何插入到另一个数据库服务器

具有最小值和最大值的 SQL 组

scala - OneToMany 与 Lift 的关系

relational-database - PostgreSQL 查找包含表名的锁