Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在postgresql查询中获取不同的列并显示一对多关系_Sql_Postgresql - Fatal编程技术网

如何在postgresql查询中获取不同的列并显示一对多关系

如何在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_

我有一个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_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