sqlplus访问语法问题

时间:2013-08-28 20:14:50

标签: ms-access syntax oracle11g syntax-error sqlplus

我无法找到帮助我解决此问题的答案。我是我所在大学的一个组织的一员,要求我们的学生每学期按照我们要求的会议达到出勤标准。为了跟踪我们的学生是否符合这个标准,我想创建一份报告,向我显示错过任何所需会议的所有学生的列表,以及他们在日期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事件E ON e.event_name = a.event_name'。

我的数据库是通过Oracle 11gxe托管的,我正在运行ODBC来在MS Access 2007上创建报告。我已尝试使用ODBC帐户名(Student成为BAP_Student)更新的表标题进行相同的查询,问题仍然存在。

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

由于您的查询已在Oracle中运行,因此您可以创建一个Access“pass through”查询,该查询要求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#