sql - SQL 一对多关系,重复/结果作为唯一行返回
问题描述
我有一个数据库,一些表有一对多的关系。如何消除作为自己唯一行返回的结果?
例如,我有一个倡议表,一个倡议可以有许多资金需求。当我执行内部连接时,我得到了结果,但看起来行正在重复以从资金表中输出一个唯一值。
从结果来看应该是这样的
第 3、4、5 行应在一行中列出所需资金的结果
Description | Acad_priority_1 | Acad_priority_2 | beginning_fiscal_year |
Develop... | false | true | 2018/2019 |
| 2018/2019 |
| 2019/2020
您能否引导我朝着正确的方向前进,或者告诉我应该如何构建 SQL 来实现这一目标?
SQL:
SELECT plan_master.plan_id,
plan_master.date_submitted,
plan_master.filename,
initiative_master.plan_id,
initiative_master.NAME,
initiative_master.acad_priority_1,
funding.initiative_id,
funding.beginning_fiscal_year
FROM plan_master
JOIN initiative_master
ON plan_master.plan_id = initiative_master.plan_id
JOIN funding
ON initiative_master.initiative_id = funding.initiative_id
ORDER BY Filename
|plan_id|date_submitted|filename|plan_id|NAME|acad_priority_1|initiative_id|begginning_fiscal_year|
|16F44FFE-5434-4E52-9D9A-F45C0A49D8E2|2018-12-03|1.txt|16F44FFE-5434-4E52-9D9A-F45C0A49D8E2|Space Utilization framework|false|8CCE0311-0E3C-467D-B675-04817A473056|2018/2019
|16F44FFE-5434-4E52-9D9A-F45C0A49D8E2|2018-12-03|1.txt|16F44FFE-5434-4E52-9D9A-F45C0A49D8E2|Space Utilization framework|false|8CCE0311-0E3C-467D-B675-04817A473056|2019/2020
|16F44FFE-5434-4E52-9D9A-F45C0A49D8E2|2018-12-03|1.txt|16F44FFE-5434-4E52-9D9A-F45C0A49D8E2|Space Utilization framework|false|8CCE0311-0E3C-467D-B675-04817A473056|2020/2021
解决方案
一个简单的连接返回一个 cartesion 产品。如果一个表有 2 行,另一个有 3 行,那么将有 6 行数据。需要对数据做不同的处理。你可以这样做:
SELECT plan.date_submitted,
plan.filename,
plan.department,
plan.last_name,
plan.first_name,
plan.email,
plan.mission_statement,
plan.vision_statement,
plan.goals_objectives,
initiative.Name,
initiative.description,
initiative.acad_priority_1,
initiative.acad_priority_2,
initiative.acad_priority_3,
initiative.acad_priority_4,
initiative.acad_priority_5,
initiative.acad_priority_6
FROM plan_master as plan
inner join (select distinct init.plan_id, init.NAME,
init.description,
init.acad_priority_1,
init.acad_priority_2,
init.acad_priority_3,
init.acad_priority_4,
init.acad_priority_5,
init.acad_priority_6,
init.operational_sustainability,
init.people_plan,
funding.beginning_fiscal_year from initiative_master as init
join funding on funding.initiative_id = init.initiative_id ) as initiative
ON plan.plan_id = initiative.plan_id
ORDER BY Filename
推荐阅读
- pdf - 使用 GlobalSign DSS 的 iText 7 PDF 签名
- mysql - 如何在 MySQL 中使用正则表达式删除 href 属性中的所有空格
- java - Mongo java驱动程序找不到接口的公共构造函数
- c++ - 为 C++ 构建 Tensorflow(从源代码)需要什么?
- python - 挣扎于简单的反向功能
- reporting-services - SSRS:如何使用带参数的 XML 文档数据源
- javascript - 是否可以将类传递给 Javascipt 函数?
- emacs - 如何在函数中使用 HTMLIZE 并将本地缓冲区更改为 HTMLIZE 输出缓冲区?
- android - 减小 opencv4 动态库 .so 大小
- c - 如何使用 Proteus 在 pic18f4550 上使用 MCLR?