2

我找不到帮助我解决此问题的答案。我是我所在大学的一个组织的一员,该组织要求我们的学生每学期按照我们要求的会议满足出勤标准。为了跟踪我们的学生是否符合此标准,我想创建一个报告,该报告将向我显示所有错过任何所需会议的学生的列表,以及他们在日期 x 和 y 之间错过了多少次会议。

当我通过 sqlplus 运行它时,我编写的以下查询工作正常

SELECT s.first_name, s.last_name, s.email, COUNT (A.student_mnumb) AS Attendance_Count 
FROM student_attendance A
INNER JOIN student S
ON S.student_M=A.student_Mnumb
INNER JOIN event E
ON e.event_name=a.event_name1
WHERE e.event_date>'01-AUG-13'
AND e.event_date<'01-DEC-13'
AND e.student_req='Y'
AND a.attend='N'
GROUP BY s.first_name, s.last_name, s.email
HAVING COUNT (A.student_mnumb) > 0;

但是,当我将此查询输入 Access 时,我收到以下错误:“查询表达式‘S.student_M=A.student_mnumb INNER JOIN event E ON e.event_name=a.event_name’中的语法错误(缺少运算符)。

我的数据库是通过 Oracle 11gxe 托管的,我正在运行 ODBC 以在 MS Access 2007 上创建报告。我已经尝试了相同的查询,每个 ODBC 帐户名称更新了表标题(学生变为 BAP_Student),问题仍然存在。

任何帮助是极大的赞赏。谢谢!

4

1 回答 1

1

由于您的查询已经在 Oracle 中工作,您可以创建一个 Access“通过”查询,它直接要求 Oracle 将查询的结果返回给您。这样就不需要将查询从 Oracle 转换为 Access SQL。

或者更简单,基于该查询创建一个 Oracle 视图。然后从 Access 中创建一个指向视图的 ODBC 链接。

如果您确实需要转换为 Access SQL,则数据库引擎需要括号用于包含多个JOIN.

FROM
    (student_attendance A
    INNER JOIN student S
    ON S.student_M=A.student_Mnumb)
    INNER JOIN event E
    ON e.event_name=a.event_name1

像这样的更改应该会让您克服第一个语法错误。但是,我鼓励您使用 Access 的查询设计器来设置您的联接。它知道使数据库引擎满意的括号规则,并且可以为您处理这些细节。

您可能会遇到其他问题。例如,Access 使用#字符来分隔日期/时间值。因此,如果 Access 将该event_date字段视为日期/时间类型,请在您的WHERE子句中尝试类似的操作...

    e.event_date > #2013-08-01#
AND e.event_date < #2013-12-01#
于 2013-08-28T20:22:13.260 回答