2016-03-23 2 views
1

Я новичок в SQL и пытаюсь получить SQL-запрос в MS Access для объединения нескольких таблиц с использованием ниже sql. Это делается для тестирования доступа.MS Access SQL Query - ошибка в соединении

объяснил, что я намерен добиться в смелой

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) 
+1

Вы не можете иметь несколько «FROM» заявление. Чтобы следовать вашей логике выше, под вашим соединением к «Table4», попробуйте RIGHT JOIN Table5 ON Table2.UserName = Table5.User –

+0

Кстати, вам нужно вставить двоеточие в конце запроса, если вы используете MS Access. –

+1

вы отметили ms-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.

Обратите внимание, что круглые скобки выглядят довольно неудобно в любой другой базе данных.

+0

Спасибо .. Оцените свое время для ответа на запрос. Я попробую наше внутреннее соединение и посмотрю, как это работает. Когда я попробовал вышеуказанный запрос, он говорит: «Оператор SELECT содержит зарезервированное слово или имя аргумента с ошибкой или отсутствием, или пунктуация неверна». Можете ли вы сообщить, где я ошибаюсь? –

+0

@UdayKumar. , , 'user' является зарезервированным словом. Вероятно, вы должны назвать столбец чем-то другим или поместить его в квадратные скобки. –

1

Re: ваш обновленный SQL.

Value является reserved word in Access SQL, поэтому могут быть другие, такие как Role, Object, Lock. Поместите их в квадратные скобки, как в предложении SELECT, так и в FROM.

И у вас есть посторонняя запятая в конце вашего ЗЕЬЕСТА:

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

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