2016-03-23 25 views
1

Ich bin neu in SQL und habe versucht, eine SQL-Abfrage in MS Access zu haben, um mehrere Tabellen mit der unten stehenden SQL zu verbinden. Dies ist für den Zugriffstest.MS Access SQL Query - Fehler beim Join

haben erklärt, was ich Absicht, in fett Tabelle

SELECT 

Table1.Role, 
Table1.Object, 

zu erreichen 1 ist die Basistabelle, die Rolle hat, Berechtigungsobjekt

Table2.Role, 
Table2.User_Name, 

Tabelle 2 hat der Benutzer zugeordnet zur Rolle

Tabelle 3 Kontrollen auf Organisationsebene verfügt, dies festzustellen, welche Firma oder Anlage der Benutzer

Table4.Role_Description, 

Tabelle zugreifen können 4 hat Rolle Beschreibungen in der Tabelle genannten Rollen 1

Table5.Full_Name, 
Table5.Department, 

Tabelle 5 hat Benutzername und Abteilung. Gemeinsames Feld Benutzername aus der Tabelle 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 

aus Tabelle vorgelegt erforderlich Joining 2, 3 und 4 der Tabelle 1

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

Joining erforderlichen Tabellen aus Tabelle 5 Tabelle 1

Ich bekomme mehrere Syntaxfehler für die obige Abfrage. Ich glaube, ich vermisse etwas Grundlegendes - Kann mir jemand helfen?

Danke! Uday


scheint, dass ich nicht mehr in Kommentar hinzufügen können. Entschuldigung, unten ist der Code, den ich aktualisiert habe, immer noch den gleichen Fehler. Könnten Sie mir bitte einen Ratschlag geben ?

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]); 

Unten ist der Code, den ich aktualisiert, immer noch die gleichen Fehler. Könnten Sie mir bitte einen Ratschlag geben ?

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

Sie können nicht mehrere haben „FROM“ Aussagen. Um Ihrer obigen Logik zu folgen, versuchen Sie unter Ihrem Join zu "Table4" RIGHT JOIN Tabelle5 ON Table2.UserName = Table5.User –

+0

Übrigens müssen Sie einen Doppelpunkt am Ende der Abfrage anheften, wenn Sie MS Access verwenden. –

+1

Sie haben ms-access getaggt, versuchen Sie, die Tabellen zu erstellen, und verwenden Sie den grafischen Abfrage-Designer, um Ihre Abfrage zu generieren. –

Antwort

1

Ich habe keine Ahnung, warum Sie RIGHT JOIN wollen würde, vor allem, wenn Sie SQL lernen. Beginnen Sie mit INNER JOIN. Wenn Sie Zeilen auslassen, wechseln Sie zu LEFT JOIN.

Die Syntax in MS Access verwendet Klammern:

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 

Sie dann die Spalten auswählen, können Sie in der SELECT wollen.

Beachten Sie, dass die Klammern in jeder anderen Datenbank ziemlich peinlich aussehen würden.

+0

Vielen Dank. Schätzen Sie Ihre Zeit für die Antwort auf die Abfrage. Ich werde unsere innere Verbindung versuchen und sehen, wie es funktioniert. Wenn ich die obige Abfrage ausprobierte, heißt es: "Die SELECT-Anweisung enthält ein reserviertes Wort oder einen Argumentnamen, der falsch geschrieben ist oder fehlt, oder die Interpunktion ist falsch." Können Sie mir bitte sagen, wo ich falsch liege? –

+0

@UdayKumar. . . 'Benutzer' ist ein reserviertes Wort. Sie sollten die Spalte wahrscheinlich etwas anderes nennen oder in eckige Klammern setzen. –

1

Re: Ihre aktualisierte SQL.

Value ist ein reserved word in Access SQL, so können andere wie Role, Object, Lock sein. Setzen Sie diese in [eckige Klammern], sowohl in der SELECT- als auch in der FROM-Klausel.

Und Sie haben ein Fremd Komma am Ende der SELECT-Klausel:

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

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