database - 如何在仅带有 ID 的第三个表中显示两个表中的区域和车站名称?
问题描述
我有 4 个表,3 个表引用area
和。最后一个合并了前 3 个表中的 ID,以使结构更容易。
station
trainer
我想要一个查询,它只显示一个确定area
的operations
和trainers
基于的idArea
,如下所示:
解决方案
您提出的实际问题的答案是“自然加入”。
如果你在这 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 本身就是严格来说不构成自然连接,但这与您追求的实际目的无关。只是一点点关于值得记住的基础知识的教育。)
推荐阅读
- android - androidx.RecyclerView ListAdapter 很慢
- firebase - Vue.js+Firebase:401 错误,“未经授权”
- google-apps-script - insertColumnsAfter 创建的列多于请求的列
- python - NameError:名称''未在 python 文件的 powershell 中定义
- java - 使用“AppCompat.NoActionBar”后,我的应用程序不断崩溃,有什么解决方案吗?
- path - 如何在 SConscript 中运行刚刚编译的程序
- azure - 使用 /mnt/ 将数据从 Azure Blob 存储读取到 Azure Databricks
- ios - "Use of unresolved indentifier 'self'" with button.addTarget
- java - Wrong Behavior with my JFrame and JDialog Login System
- python - 从二维数组单元格的熊猫列中获取唯一值