You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PostgreSQL Inner Join关联三张表生成目标结果集?

如何关联多张表获取包含优先级的结果表?

我有一张名为run的表:

ScenarioDateSystemResult
Scen107-01APASS
Scen107-01BPASS
Scen107-01CPASS
Scen107-01DPASS
Scen107-02AFAIL
Scen107-02BFAIL
Scen107-02CFAIL
Scen107-02DFAIL

另外还有两张映射表:

项目-场景映射表(假设名为project_scenario):

ProjectScenario
Proj1Scen1

项目-系统-优先级映射表(假设名为project_system_priority):

ProjectSystemPriority
Proj1A2
Proj1B3
Proj1C1
Proj1D4

我需要将这些表关联,生成包含Priority字段的结果表:

ScenarioDateSystemResultPriority
Scen107-01APASS2
Scen107-01BPASS3
Scen107-01CPASS1
Scen107-01DPASS4
Scen107-02AFAIL2
Scen107-02BFAIL3
Scen107-02CFAIL1
Scen107-02DFAIL4

原本考虑用INNER JOIN,但不知道怎么处理第二张映射表以Project关联的问题,求指导。


解决方案:通过多表串联JOIN实现关联

你可以通过两次INNER JOIN串联三张表,核心逻辑是先绑定场景对应的项目,再通过项目+系统匹配优先级:

SELECT
    r.Scenario,
    r.Date,
    r.System,
    r.Result,
    psp.Priority
FROM
    run r
INNER JOIN
    project_scenario ps ON r.Scenario = ps.Scenario
INNER JOIN
    project_system_priority psp ON ps.Project = psp.Project AND r.System = psp.System;

逻辑说明

  1. 第一次INNER JOIN:用run表的Scenario匹配project_scenario表的同名字段,为每条运行记录绑定所属项目;
  2. 第二次INNER JOIN:用第一步得到的Project,加上run表的System,匹配project_system_priority表的对应字段,从而获取该系统在对应项目下的优先级;
  3. INNER JOIN会自动过滤无匹配项的记录,确保结果中每条数据都有对应的优先级,完全符合你期望的输出结构。

如果你的映射表实际名称不同,替换SQL中的表名即可。

内容的提问来源于stack exchange,提问作者wadeland1738

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 13:48:22