Windows中的多个查询连接表单应用程序C#,MS Access无法正常工作

时间:2017-11-15 03:56:32

标签: c# winforms ms-access

我在MS Access数据库中有三个表

  

用户,   室,   room_history

room_history包含用户,房间ID。当我尝试使用room_history数据加入用户时成功检索与房间和room_history相同的内容。 这是我加入所有三个表的查询。

"SELECT users.*,rooms.room_id,rooms.room_name,rooms.type,room_history.start_date,room_history.end_date FROM users " +
                "LEFT JOIN room_history ON room_history.user_id= users.user_id " +
                "LEFT JOIN rooms ON room_history.room_id = rooms.room_id";

使用上述查询发生以下错误。

  查询表达式中的

语法错误(缺少运算符)'room_history.user_id = users.user_id在room_history.room_id = rooms.room_i上的LEFT JOIN会议室

我检查/更改我的数据库表名称,压缩数据库。

3 个答案:

答案 0 :(得分:0)

尝试使用表别名 - 问题似乎是类型是保留的SQL关键字:

SELECT U.*,R.room_id,R.room_name,R.[type],RH.start_date,RH.end_date FROM users U
LEFT JOIN room_history RH ON RH.user_id= U.user_id
LEFT JOIN room R ON RH.room_id = R.room_id

答案 1 :(得分:0)

您的问题是您的命名惯例。

您使用了

rooms.type

其中type是数据库的保留字。

您收到的错误

syntax error (missing operator) in query expression 'room_history.user_id = users.user_id LEFT JOIN rooms on room_history.room_id = rooms.room_i'

与下面链接讨论的命名约定有关。

https://support.microsoft.com/en-ph/help/932994/you-receive-an-error-message-when-you-run-a-query-in-microsoft-access

如果您坚持使用您的查询"原样"你可以简单地在所有保留字的表名上加上括号([]),(例如[type], [start_date],[user_id]

答案 2 :(得分:0)

是否可以在此处获取基础知识 - 并使用Access查询设计视图工具设计此查询? ...而不是尝试使用基于文本的sql语句来解决这个问题......

使用查询设计功能在Access中进行查询,并在返回正确的记录集时验证它是否正确运行 - 然后使用该选项将其放入SQL视图(而不是设计视图)以便查看基于文本的sql语句。