MS Access SQL查询 - 加入

时间:2016-03-23 09:38:36

标签: sql ms-access join

我是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中的所需表格加入表格

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

谢谢! 乌代

似乎我无法在评论中添加更多内容。对不起,下面是我更新的代码,仍然得到相同的错误。你能告诉我吗?

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)

2 个答案:

答案 0 :(得分: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中选择所需的列。

请注意,在任何其他数据库中,括号看起来都很尴尬。

答案 1 :(得分:1)

Re:您更新的SQL。

int questionId=getIntent().getExtras().getInt("questionId"); reserved word in Access SQL,因此可能是foreach ($files as $file) { $files->saveAs(Yii::getPathOfAlias('webroot').'/upload/'.$fileName); } 之类的其他人。将这些放入SELECT和FROM子句中的[方括号]中。

你的SELECT子句末尾有一个无关的逗号:

Value