如何使多表子查询更少罗嗦访问

时间:2017-08-17 00:40:34

标签: sql ms-access subquery multi-table

我正在尝试查询以查找不止一次受访学生的所有详细信息

我使用以下方法成功获得了结果:

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。当我这样做时,我会得到所有学生的结果,而不是

之后的特定2
SELECT *
FROM STUDENT
WHERE StudNo IN
(SELECT StudID
FROM STUDENT_INTERVIEW
WHERE 
(SELECT COUNT(StudID)
FROM STUDENT_INTERVIEW
HAVING COUNT(StudID) > 1;))

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。您基本上可以完成子查询中的所有工作。