3

好的,所以我想解决的查询:

我想表达以下业务规则:

显示需要额外审核的组(针对特定教程 (tutorialID) 和周 (week))。

所以基本上我需要确定一个组中的成员数量,然后我需要汇总该周和该组的所有 Scrum 评论,看看这个数量是否等于该组中的成员数量。如果是,则意味着该周的所有成员都经过了审核,因此不需要显示。

假设:一个会员每周只能被评论一次。

我尝试了以下 SQL,但是出现以下错误Subquery returns more than 1 row

SELECT groupName, g.groupId
FROM `student` s, `group` g
WHERE s.GroupId = g.GroupId 
AND s.GroupId IS NOT NULL
AND s.tutorialId =  2
GROUP by s.GroupId
AND s.GroupID = (
    SELECT GroupId
    FROM student
    GROUP BY GroupId
    HAVING  count(*)> (
        SELECT count(*)
        FROM scrumreview r, student s
        WHERE r.reviewee = s.studentID
        GROUP BY GroupId    
        AND r.week = 5
        )
    )

学生 在此处输入图像描述

scrumreview 在此处输入 asdasddescription

团体 在此处输入图像描述

4

3 回答 3

3

您的内部查询(从第 8 行开始)返回多个groupids。相等运算符=比较 1 对 1,但您想要的是比较 1 对多,您可以使用IN.

因此,要解决此问题,请在第 7 行更改此代码...

AND s.GroupID = (

...对此:

AND s.GroupID IN (
于 2012-04-30T11:54:25.220 回答
0
SELECT GroupId
FROM student
GROUP BY GroupId
HAVING  count(*)> (
    SELECT count(*)
    FROM scrumreview r, student s
    WHERE r.reviewee = s.studentID  
    AND r.week = 5
    )

返回超过 1 行,或者您需要优化该 SQL 使其仅返回一行,或者您需要更改以下行:

AND s.GroupID = (

到 IN:

AND s.GroupID IN (
于 2012-04-30T11:57:10.200 回答
0

试试这个:

SELECT groupName, 
g.groupId FROM `student` s, 
`group` g WHERE s.GroupId = g.GroupId  
AND s.GroupId IS NOT NULL 
AND s.tutorialId =  2 
GROUP by s.GroupId AND s.GroupID in (SELECT GroupId FROM student GROUP BY GroupId 
HAVING  count(*)> (SELECT count(*) FROM scrumreview r, student s WHERE r.reviewee =
s.studentID AND r.week = 5)) 
于 2012-04-30T12:02:16.140 回答