试图让每个学生获得一条记录返回

时间:2017-07-10 15:40:47

标签: sql ms-access relational-database inner-join ms-access-2013

一般来说,我对数据库很新,我正在努力学习。我理解一些基础知识,并且主要使用Access内部函数来使事情有效,因为这是我理解的。

我正在慢慢学习SQL,并且在尝试阅读其他问题的答案时,我在为我的数据库工作时会遇到很多麻烦。

我有一个名为“应用程序数据”或[应用程序数据]的表(我被告知在编写数据库时我不应该使用空格,但此时要回过头来纠正太多了)我正在尝试为每个拥有一个学生的学生提供最新的申请。我已经尝试在日期字段上使用最后一个,在ID字段上使用Max,但两个结果最终只产生一个返回,无论哪个适合整个表,而不是每个学生最新的。

我已经尝试了其他一些东西,并且已经阅读了好几天,但似乎我需要一种叫做“内部联接”的东西来让它回归我需要的东西。我不确定那是什么或它是如何工作的。

无论如何,我在SQL中的查询是:

SELECT DISTINCTROW [Application Data].[Most Recent Application Term]
    ,[Application Data].[Most Recent Application Year]
    ,[Application Data].[Application Date]
    ,[Application Data].[Application Status]
    ,[Application Data].[Application Decision]
    ,[Application Data].Degree
    ,[Application Data].Specialization
FROM [Application Data]
WHERE (
        (
            ([Application Data].ID) = (
                SELECT Max(ID)
                FROM [Application Data]
                )
            )
        )
GROUP BY [Application Data].[Most Recent Application Term]
    ,[Application Data].[Most Recent Application Year]
    ,[Application Data].[Application Date]
    ,[Application Data].[Application Status]
    ,[Application Data].[Application Decision]
    ,[Application Data].Degree
    ,[Application Data].Specialization
    ,[Application Data].PCID
HAVING ((([Application Data].[Application Date]) IS NOT NULL))
ORDER BY [Application Data].PCID DESC
    ,[Application Data].[Application Date] DESC;

此时我完全迷失了,但它会进入另一个表格,从中更新所有报告所依据的主表格字段。

我非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

首先是一些关于初学者的一般建议: 保持桌子清洁和标准化,避免空间。一个表中的每个值都与主键有关,而没有其他任何内容。 在您的示例中,“最近的应用程序”实际上是指申请人而不是应用程序的ID。因此,将其移动到另一个表或只是将其保留在查询中。

我对您的数据库设计的建议:

  1. tbl_Application:App_ID,Student_ID,App_Date,App_Status,App_Decision,App_Specialization,App_Degree
  2. tbl_Student:Student_ID,Student_Name等。
  3. 因此,您的应用程序ID包含您所需的信息,并将通过Student_ID链接到tbl_student。 “最近申请年份”可以添加到tbl_student中,并可能通过UPDATE查询自动更新。

    现在,让我们解决您的问题:

    首先,如上所述,您的查询缺少学生信息,因此,它应该获取最大值的字段的信息。 您的内部查询将仅输出单个值 - 所有值的最大ID或日期,因为它不包括用于分组的第二个字段。 将学生信息添加到表格并查询:

    math.h

    这应该会产生一个查询,向您显示最新的应用程序以及存储在表[Application Data]中的有关该特定应用程序的所有信息。您可能希望运行内部查询(括号内的所有内容)以查看其工作原理。

    这通常可以帮助您理解查询和SQL:尝试在草图视图中一步一步地构建更复杂的查询,并将它们存储在数据库中。完成所有工作后,您可以将SQL代码从第一个子查询复制到主查询,并尝试截断不必要的内容。