2016-04-28 145 views
0

此声明有什么问题吗?SQL错误声明,缺少操作员

SELECT * 
FROM Movies INNER JOIN 
    Sessions 
    ON Movies.MovieID=Sessions.MovieID INNER JOIN 
    Tickets 
    ON Sessions.SessionID=Tickets.SessionID; 

当我在Access上运行它时,我得到一个语法错误'Missing Operator'。 也有任何替代Access,我可以从Excel电子表格导入数据?

+0

MS Access有一个棘手的方法来加入超过2个表。以某种方式使用括号。 – jarlh

回答

2

一般来说,没有。在MS Access中,是的。它喜欢额外的括号,可能是因为数据库开发人员不相信可读性:

SELECT * 
FROM (Movies INNER JOIN 
     Sessions 
     ON Movies.MovieID = Sessions.MovieID 
    ) INNER JOIN 
    Tickets 
    ON Sessions.SessionID = Tickets.SessionID; 
+0

谢谢,我在做了设计版本之后发现,然后进入SQL视图,并且它有额外的括号。感谢帮助。 – Simon

0

您可以启用OPENROWSET如果你有SQL的本地实例,并安装MDACs(我会同时安装x86和x64,如果你有一个64位电脑)。以下是一篇文章的链接,可帮助您进行设置。另外,请确保以提升的权限运行管理工作室。

How to enable Ad Hoc Distributed Queries

下面是查询会是什么样。在我的例子我使用Excel 8.0,而不是12,因为列名在我的select语句可寻址的8

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
        'Excel 8.0;Database=C:\Temp\MyExcelDoc.xlsx;', 
        'SELECT * FROM [Sheet1$]') 
0

您可以从Excel电子表格中的数据导出成多种格式。我发现两个最好的;

  • 逗号分隔值(CSV)
  • XML

在许多情况下,您可以从电子表格的Excell处理数据直接。 这真的取决于你想要做什么。

你的SQL查询看起来不错 - 但是对于Access,你需要在括号内做额外的连接;

SELECT * FROM ((Movies 
INNER JOIN Sessions ON Movies.MovieID=Sessions.MovieID) 
INNER JOIN Tickets ON Sessions.SessionID=Tickets.SessionID) 
;