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 查询 - 加入错误的主要内容,如果未能解决你的问题,请参考以下文章