MS Access SQL 查询 - 加入错误

Posted

技术标签:

【中文标题】MS Access SQL 查询 - 加入错误【英文标题】:MS Access SQL Query - Error in Join 【发布时间】:2016-03-23 09:38:35 【问题描述】:

我是 SQL 新手,一直在尝试在 MS Access 中使用 SQL 查询来使用以下 sql 连接多个表。这是为了进行访问测试。

已经用粗体解释了我想要实现的目标

SELECT

Table1.Role,
Table1.Object,

表1是具有角色、授权对象的基表

Table2.Role,
Table2.User_Name,

表 2 将用户映射到角色

Table3.Org_Level_Desp,
Table3.Org_LEvel_Values_1,

表 3 具有组织级别的控制,这决定了用户可以访问哪个公司或工厂

Table4.Role_Description,

表 4 包含表 1 中提到的角色的角色描述

Table5.Full_Name,
Table5.Department,

表 5 有用户名和部门。公共字段是表 2 中的用户名

FROM
Table1
RIGHT JOIN Table2 ON Table1.Role=Table2.Role
RIGHT JOIN Table3 ON Table1.Role=Table3.Role
RIGHT JOIN Table4 ON Table1.Role=Table4.rOLE

需要将表2、3和4加入表1

FROM 
Table2
RIGHT JOIN Table5 ON Table2.USER_NAME=Table5.USer

将需要的表从表 5 连接到表 1

我收到上述查询的多个语法错误。我想我缺少一些基本的东西 - 任何人都可以帮忙吗?

谢谢! 乌代


似乎我无法在评论中添加更多内容。对不起,下面是我更新的代码,仍然得到同样的错误。可以请教吗?

SELECT

TABLE1.Role, 
TABLE1.Object, 
TABLE1.Field_name, 
TABLE1.Value, 
TABLE1.[and], 
TABLE1.ID_whether_object_is_deleted, 

TABLE2.Role,
TABLE2.User_Name,
TABLE2.End_date,

TABLE3.Org_Level_Control,
TABLE3.Org_LEvel_Values_1,
TABLE3.Org_LEvel_Values_2,

Table4.Role_Description,

TABLE6.Field_Short_Description,

TABLE7.Object_Level_Desp,

TABLE8.Auth_Obj_Text,

TABLE5.Full_Name,
TABLE5.Department,

TABLE9.Valid_to,
TABLE9.Lock,

from ((((((TABLE1 INNER JOIN TABLE2 ON TABLE1.Role=TABLE2.Role)
INNER JOIN TABLE3 ON TABLE1.Role=TABLE3.Role)
INNER JOIN Table4 ON TABLE1.Role=Table4.role)
INNER JOIN TABLE6 ON TABLE1.Field_Name=TABLE6.Field_Name)
INNER JOIN TABLE7 ON TABLE1.[Object]=TABLE7.Org_Object)
INNER JOIN TABLE8 ON AGR_TABLE1.Field_name=TABLE8.Field_Name)

FROM 
(TABLE2 INNER JOIN TABLE5 ON TABLE2.USER_NAME=TABLE5.[USer])
INNER JOIN TABLE9 ON TABLE2.USER_NAME=TABLE9.[User]);

下面是我更新的代码,仍然出现同样的错误。可以请教吗?

SELECT

TABLE1.Role, 
TABLE1.Object, 
TABLE1.Field_name, 
TABLE1.Value, 
TABLE1.[and], 
TABLE1.ID_whether_object_is_deleted, 

TABLE2.Role,
TABLE2.User_Name,
TABLE2.End_date,

TABLE3.Org_Level_Control,
TABLE3.Org_LEvel_Values_1,
TABLE3.Org_LEvel_Values_2,

Table4.Role_Description,

TABLE6.Field_Short_Description,

TABLE7.Object_Level_Desp,

TABLE8.Auth_Obj_Text,

TABLE5.Full_Name,
TABLE5.Department,

TABLE9.Valid_to,
TABLE9.Lock,

from ((((((TABLE1 INNER JOIN TABLE2 ON TABLE1.Role=TABLE2.Role)
INNER JOIN TABLE3 ON TABLE1.Role=TABLE3.Role)
INNER JOIN Table4 ON TABLE1.Role=Table4.role)
INNER JOIN TABLE6 ON TABLE1.Field_Name=TABLE6.Field_Name)
INNER JOIN TABLE7 ON TABLE1.[Object]=TABLE7.Org_Object)
INNER JOIN TABLE8 ON AGR_TABLE1.Field_name=TABLE8.Field_Name)

【问题讨论】:

您不能有多个“FROM”语句。按照上面的逻辑,在您加入“Table4”下,尝试 RIGHT JOIN Table5 ON Table2.UserName =Table5.User 顺便说一句,如果您使用的是 MS Access,则需要在查询末尾添加一个冒号。 您已标记 ms-access,尝试创建表并使用图形查询设计器生成您的查询。 @DavyC:您的意思可能是分号;,但您实际上并不需要这个。 Access 在使用查询设计器时会附加它,但它是可选的。 是的,错字,我不知道,谢谢! 【参考方案1】:

我不知道您为什么想要RIGHT JOIN,尤其是在您学习 SQL 的时候。从INNER JOIN 开始。如果这会遗漏行,请移至LEFT JOIN

MS Access 中的语法使用括号:

SELECT . . .
FROM (((Table1 INNER JOIN
        Table2
        ON Table1.Role = Table2.Role
       ) INNER JOIN
       Table3
       ON Table1.Role = Table3.Role
      ) INNER JOIN
      Table4
      ON Table1.Role = Table4.rOLE
     ) INNER JOIN
     Table5
     ON Table2.USER_NAME = Table5.USer

然后您可以在SELECT 中选择您想要的列。

请注意,括号在任何其他数据库中都会显得很别扭。

【讨论】:

谢谢您。感谢您抽出宝贵的时间回复查询。我将尝试我们的内部连接,看看它是如何工作的。当我尝试上面的查询时,它说“SELECT 语句包含一个保留字或参数名称拼写错误或丢失,或者标点符号不正确”你能告诉我哪里出错了吗? @UdayKumar 。 . . user 是保留字。您可能应该将该列命名为其他名称或将其放在方括号中。【参考方案2】:

Re:您更新的 SQL。

Value 是一个reserved word in Access SQL,所以可能是像Role, Object, Lock 这样的其他人。在 SELECT 和 FROM 子句中将它们放入 [方括号] 中。

您的 SELECT 子句末尾有一个多余的逗号:

TABLE9.Valid_to,
TABLE9.Lock,    <== delete this comma

from ((((((TABLE1 INNER JOIN TABLE2 ON TABLE1.Role=TABLE2.Role)

【讨论】:

以上是关于MS Access SQL 查询 - 加入错误的主要内容,如果未能解决你的问题,请参考以下文章

加入时更新 MS Access 语法错误

更新查询的 MS Access SQL 错误

MS Access sql错误查询

日期转换错误——MS Access前端查询sql后端

库存 SQL 查询出现歧义错误,其中两个字段应相等以进行计算。 MS-ACCESS

带有子查询的 SQL 查询上的 MS Access VBA 运行时错误 3075