首页 > 解决方案 > 为在 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”?

标签: sqlpostgresqlforeign-keys

解决方案


我会这样做

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}

推荐阅读