如何在postgresql查询中获取不同的列并显示一对多关系
我有一个UI和服务器组件。在UI中,我需要显示一个项目id,以便进行如下选择如何在postgresql查询中获取不同的列并显示一对多关系,sql,postgresql,Sql,Postgresql,我有一个UI和服务器组件。在UI中,我需要显示一个项目id,以便进行如下选择 project_id_1 -case_no_1 -case_no_2 project_id_2 _case_no_3 ... 在服务器端,我有groovy,它使用下面的查询查询postgresql。此查询无法为项目id提供多个案例编号 SELECT DISTINCT case_no, project_no FROM (SELECT lm."PROJECT_ID" AS project_
project_id_1
-case_no_1
-case_no_2
project_id_2
_case_no_3
...
在服务器端,我有groovy,它使用下面的查询查询postgresql。此查询无法为项目id提供多个案例编号
SELECT DISTINCT case_no,
project_no
FROM
(SELECT lm."PROJECT_ID" AS project_no,
case_no
FROM filter_analysis_store fas
LEFT JOIN share_analysis_store sas USING (fa_identifier)
JOIN "LOG_METADATA" lm
ON fas.case_no = lm."CASE_NO"
WHERE fas.created_by = 'a@a.com'
OR sas.shared_to = 'a@a.com'
OR lm."UPLOADED_BY" like 'a@a.com'
ORDER BY lm."PROJECT_ID"
) tmp;
查询输出
0203996, 1-1532464
02029418, 1-53795134
01912591, 1-22432322
0199845, 2-00073626
0203959, 1-2225633
01995271, 1-1755865
01757560, 0-10060 <-- This project has multiple casenos
共享分析商店
fa_identifier,case_no,created_by
FA000179, 0199845, a@a.com
FA000183, 0199845, a@a.com
FA000184, 0203996, a@a.com
FA000185, 0203996, a@a.com
FA000187, 0203959, a@a.com
FA000189, 0203996, a@a.com
FA000190, 02029418, a@a.com
FA000191, 02029418, a@a.com
FA000192, 0203959, a@a.com
FA000193, 0203959, a@a.com
FA000194, 0203959, a@a.com
FA000195, 01912591, a@a.com
FA000199, 0203959, a@a.com
fa_identifier,shared_to,shared_by
FA000173, a@a.com, p@p.com
FA000196, a@a.com, p@p.com
FA000180, a@a.com, r@r.com
FA000198, a@a.com, r@r.com
FA000203, a@a.com, r@r.com
FA000204, a@a.com, r@r.com
“日志元数据”
使用以上3个表,我需要显示项目和案例与“创建人”上where子句的关系a@a.com“或共享给”a@a.com"
注意:一个项目id下可以有多个案例编号
SELECT DISTINCT case_no,
project_no
FROM
(SELECT lm."PROJECT_ID" AS project_no,
case_no
FROM filter_analysis_store fas
LEFT JOIN share_analysis_store sas USING (fa_identifier)
JOIN "LOG_METADATA" lm
ON fas.case_no = lm."CASE_NO"
WHERE fas.created_by = 'a@a.com'
OR sas.shared_to = 'a@a.com'
OR lm."UPLOADED_BY" like 'a@a.com'
ORDER BY lm."PROJECT_ID"
) tmp;
请帮我查询一个项目id可以容纳多个案例号。我觉得您的查询没有问题。可能您没有看到预期的结果,因为
order by
正在应用于临时表,并且没有在结果中转换。否则,您的示例数据中肯定存在一些其他问题
例如,此查询应给出相应的结果(只要案例编号匹配“a@a.com”):
这样的查询可能有助于您了解什么会导致多个条目:
select PROJECT_ID, string_agg(CASE_NO, ',') as cases, count(*) as count
from LOG_METADATA
group by PROJECT_ID
having count(*) > 1
在您的示例数据中,
0-10060
项目编号来自何处?一个更清晰的例子显示一个组合将导致多个case_no将有所帮助。此外,这种情况下的预期输出是什么?两行,如(projectA caseA,projectA case B)?@systemjack:当保存一个日志文件时,它会保存在一个项目id和案例编号下。此信息显示在“日志元数据”下。是的,行,如(projectA caseA,projectA case B)是好的。如果我在项目上做了一个不同的操作,我不会每个项目只得到一个案例编号吗?否,您使用distinct的方式是寻找项目号和案例号的不同组合。“如果指定distinct,将从结果集中删除所有重复行”()
select PROJECT_ID, string_agg(CASE_NO, ',') as cases, count(*) as count
from LOG_METADATA
group by PROJECT_ID
having count(*) > 1