如何用PostgreSQL Inner Join关联三张表生成目标结果集?
如何关联多张表获取包含优先级的结果表?
我有一张名为run的表:
| Scenario | Date | System | Result |
|---|---|---|---|
| Scen1 | 07-01 | A | PASS |
| Scen1 | 07-01 | B | PASS |
| Scen1 | 07-01 | C | PASS |
| Scen1 | 07-01 | D | PASS |
| Scen1 | 07-02 | A | FAIL |
| Scen1 | 07-02 | B | FAIL |
| Scen1 | 07-02 | C | FAIL |
| Scen1 | 07-02 | D | FAIL |
另外还有两张映射表:
项目-场景映射表(假设名为project_scenario):
| Project | Scenario |
|---|---|
| Proj1 | Scen1 |
项目-系统-优先级映射表(假设名为project_system_priority):
| Project | System | Priority |
|---|---|---|
| Proj1 | A | 2 |
| Proj1 | B | 3 |
| Proj1 | C | 1 |
| Proj1 | D | 4 |
我需要将这些表关联,生成包含Priority字段的结果表:
| Scenario | Date | System | Result | Priority |
|---|---|---|---|---|
| Scen1 | 07-01 | A | PASS | 2 |
| Scen1 | 07-01 | B | PASS | 3 |
| Scen1 | 07-01 | C | PASS | 1 |
| Scen1 | 07-01 | D | PASS | 4 |
| Scen1 | 07-02 | A | FAIL | 2 |
| Scen1 | 07-02 | B | FAIL | 3 |
| Scen1 | 07-02 | C | FAIL | 1 |
| Scen1 | 07-02 | D | FAIL | 4 |
原本考虑用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;
逻辑说明
- 第一次
INNER JOIN:用run表的Scenario匹配project_scenario表的同名字段,为每条运行记录绑定所属项目; - 第二次
INNER JOIN:用第一步得到的Project,加上run表的System,匹配project_system_priority表的对应字段,从而获取该系统在对应项目下的优先级; INNER JOIN会自动过滤无匹配项的记录,确保结果中每条数据都有对应的优先级,完全符合你期望的输出结构。
如果你的映射表实际名称不同,替换SQL中的表名即可。
内容的提问来源于stack exchange,提问作者wadeland1738
相关产品推荐
相关产品推荐

