首页 > 解决方案 > 如何在仅带有 ID 的第三个表中显示两个表中的区域和车站名称?

问题描述

我有 4 个表,3 个表引用area和。最后一个合并了前 3 个表中的 ID,以使结构更容易。 stationtrainer在此处输入图像描述

我想要一个查询,它只显示一个确定areaoperationstrainers基于的idArea,如下所示: 在此处输入图像描述

标签: databaserelational-database

解决方案


您提出的实际问题的答案是“自然加入”。

如果你在这 4 个表/关系之间进行自然连接,你会得到一个 6 列的表/关系:3 个 ID 和 3 个名称。

如果您从中投影出 3 个 id(在 SQL、SELECT NAMEAREA、NAMESTATION、NAMETRAINER 中),您将得到您所说的表/关系。

在 SQL 中,可以使用 NATURAL JOIN 关键字进行自然连接,也可以使用 ON 显式拼写 equijin 条件:

SELECT NAMEAREA, NAMESTATION, NAMETRAINER FROM
  REGISTERS NATURAL JOIN AREA NATURAL JOIN STATION NATURAL JOIN TRAINERS

或者

SELECT NAMEAREA, NAMESTATION, NAMETRAINER FROM
  REGISTERS JOIN AREA ON REGISTERS.IDAREA = AREA.IDAREA
            JOIN STATION ON REGISTERS.IDSTATION = STATION.IDSTATION
            JOIN TRAINERS ON REGISTERS.IDTRAINER = TRAINERS.IDTRAINER

(没有在任何引擎上对此进行拼写检查,所以也许要小心我的语法错误——你仍然应该能够前进。)

(请注意,在后一种情况下,JOIN 本身,即没有 SELECT,不会产生一个 6 列的表,而是一个 9 列的表:每个 id 两次,加上相应的名称。这意味着 JOIN 本身就是严格来说不构成自然连接,但这与您追求的实际目的无关。只是一点点关于值得记住的基础知识的教育。)


推荐阅读