sql - 为在 PostgreSQL 中选择链接表的所有数据编写 SQL 查询的简单方法
问题描述
当表在链中链接在一起时,我想返回通过外键链接在一起的所有表的数据。有一个简单的 SQL 命令吗?
示例数据:一个入口有 floor_id fk 到楼层表,地板表有一个 building_id fk 到建筑物,建筑物有一个 company_id fk 到公司。
仅给定入口ID,我可以得到所有上述数据吗?
有没有比下面的 SQL 更优雅的方法来做到这一点:
SELECT * FROM floor_entrance
LEFT JOIN floor ON floor.id = (SELECT floor_id FROM floor_entrance WHERE id = {floor_entrance_id})
LEFT JOIN building ON building.id = (SELECT building_id FROM floor WHERE id =
(SELECT floor_id FROM floor_entrance WHERE id = {floor_entrance_id}))
LEFT JOIN company ON company.id = (SELECT company_id FROM building WHERE id =
(SELECT building_id FROM floor WHERE id =
(SELECT floor_id FROM floor_entrance WHERE id = {floor_entrance_id})))
WHERE floor_entrance.id = {floor_entrance_id}
我正在寻找一种简洁的方式来编写这个 postgreSQL 命令。
期望的结果: “LEFT JOIN ALL ON FOR Foreign Keys Across the Whole SCHEMA”?
解决方案
我会这样做
SELECT * FROM floor_entrance A
LEFT JOIN floor B ON A.floor_id = B.id
LEFT JOIN building C ON B.building_id = C.id
LEFT JOIN company D ON C.company_id = D.id
WHERE A.id = {floor_entrance_id}
推荐阅读
- python - 如何调整窗口大小以填充全屏高度但指定屏幕宽度?
- php - 如何通过选择课程 ID 来选择特定课程并将用户所有选定的课程与同一行连接起来
- javascript - 如何访问自定义控件的变量
- android - google-map 片段应用程序在模拟器中崩溃后打开 WebView 活动
- c++ - 最后需要一个棘手的 while 循环的 C++ 赋值
- powershell - 显示名称包含在数组中的项目
- javascript - 发布嵌套对象会破坏 NodeJS 后端中的编码
- python - 如何使用 python 和 Opencv 或 PIL 去除文本周围的边缘
- java - 如何在wildfly中获取infinispan缓存统计信息?
- javascript - 在Javascript中链接可变数量的过滤器函数