我正在尝试查询以查找不止一次受访学生的所有详细信息
我使用以下方法成功获得了结果:
SELECT S.StudNo, S.StudLName, S.StudFName, S.StudMobile, S.City, S.DateEnrolled, S.ProgNo, S.AmountDue, S.Gender
FROM STUDENT AS S INNER JOIN STUDENT_INTERVIEW AS SI ON S.StudNo = SI.StudID
WHERE
(SELECT COUNT(SI.StudID)
FROM STUDENT_INTERVIEW)
GROUP BY S.StudNo, S.StudLName, S.StudFName, S.StudMobile, S.City, S.DateEnrolled, S.ProgNo, S.AmountDue, S.Gender
HAVING COUNT(SI.StudID) > 1;
但它似乎过长了......我试图重写它以使它不那么罗嗦虽然无法得到正确的结果。我一直在尝试使用更多的子查询,而不必使用GROUP BY
。当我这样做时,我会得到所有学生的结果,而不是
SELECT *
FROM STUDENT
WHERE StudNo IN
(SELECT StudID
FROM STUDENT_INTERVIEW
WHERE
(SELECT COUNT(StudID)
FROM STUDENT_INTERVIEW
HAVING COUNT(StudID) > 1;))
答案 0 :(得分:1)
您的第一个查询是一个好的开始。这是一个改进:
SELECT S.*
FROM STUDENT AS S
WHERE S.StudNo IN (SELECT SI.StudId
FROM STUDENT_INTERVIEW as SI
GROUP BY SI.StudId
HAVING COUNT(*) > 1
);
外部查询既不需要JOIN
也不需要GROUP BY
。您基本上可以完成子查询中的所有工作。