MYSQL 多个 select 查询在一个重复结果中

MYSQL multiple select queries in one repeating results

我有一个包含一些子查询的查询。子查询本身工作正常,但当放在一个大查询中时,返回的结果只是重复。

查询:

SELECT
kpi.kra_id AS kra,
kpi.id AS kpi, 
(
    SELECT 
    ROUND(AVG(sp.progress), 2) 
    FROM `submissions` AS sub
    LEFT JOIN `sub_performancemeasures` sp ON sp.sub_id = sub.id
    WHERE sub.programme = 'programme' 
    AND sub.submission_year = '2015/2016' 
    AND sub.state = '2'
    AND sub.period = '1'
    AND pm.kpi_id = kpi.id
) AS p1_programme_score,
(
    SELECT 
    ROUND(AVG(sp.progress), 2) 
    FROM `submissions` AS sub
    LEFT JOIN `sub_performancemeasures` sp ON sp.sub_id = sub.id
    WHERE sub.programme = 'programme' 
    AND sub.submission_year = '2015/2016' 
    AND sub.state = '2'
    AND sub.period = '2'
    AND pm.kpi_id = kpi.id
) AS p2_programme_score
FROM `kpis` kpi
LEFT JOIN `performance_measures` pm ON kpi.id = pm.kpi_id
GROUP BY kpi.id 

结果如下所示:

我正在寻找的是每个 KPI 以显示每个 p1 和 p2 列自己的分数。

好的,非常感谢 Jerodev and xQBert 为我指明了正确的方向。新的工作查询如下:

SELECT
kpi.kra_id AS kra,
kpi.id AS kpi, 
(
    SELECT 
    ROUND(AVG(sp.progress), 2) 
    FROM `submissions` AS sub
    LEFT JOIN `sub_performancemeasures` sp ON sp.sub_id = sub.id
    LEFT JOIN `performance_measures` pm ON pm.id = sp.pm_id
    WHERE sub.programme = 'programme' 
    AND sub.submission_year = '2015/2016' 
    AND sub.state = '2'
    AND sub.period = '1'
    AND pm.kpi_id = kpi.id
) AS p1_programme_score,
(
    SELECT 
    ROUND(AVG(sp.progress), 2) 
    FROM `submissions` AS sub
    LEFT JOIN `sub_performancemeasures` sp ON sp.sub_id = sub.id
    LEFT JOIN `performance_measures` pm ON pm.id = sp.pm_id
    WHERE sub.programme = 'programme' 
    AND sub.submission_year = '2015/2016' 
    AND sub.state = '2'
    AND sub.period = '2'
    AND pm.kpi_id = kpi.id
) AS p2_programme_score
FROM `kpis` kpi
GROUP BY kpi.id 

此查询的不同之处在于 performance_measures table 的连接位置。它在主查询上,但需要绑定到子查询,所以我移动了它和 VIOLA!

我不知道如何解决这个问题,因为你没有包含数据结构。但是,我可以确定可能的原因。

每个子查询都有这个条件:

AND pm.kpi_id = kpi.id

pmkpi 都不在子查询中,所以这只是在外部查询中重复了 join 条件。据推测,您希望 kpi_id 匹配子查询中的某些 table,subsp.