2017-12-28 9 views
-1

Ich habe eine Frage beziehen könnte: I 3 Tabellen in Access haben -Das angegebene Feld <field> zu mehr als einer Tabelle aufgelistet in der FROM-Klausel der SQL-Anweisung

Assignments (Date, Parent Company ID, Sales Rep ID) 
Roster (Date, Sales Rep ID, Team ID) 
Goals (Date, Team ID) 

Zuerst habe ich Roster auf Zuweisungen verbunden links einen endgültigen Roster Tisch bekommen und ich auf Goals diese neue Tabelle LEFT JOIN versuchen aber ich erhalte eine Fehlermeldung, die besagt:

Specified field FR.date could refer to more than one table listed in the from clause of your SQL statement. 

Unten finden Sie die SQL:

SELECT * 
    from Goals as G 
     LEFT JOIN 
      (SELECT * 
       FROM Assignments AS A 
        LEFT JOIN Roster AS R 
         ON (A.[Sales Rep ID] = R.[User ID]) 
         AND (A.Date = R.Date) 
      ) FR 
     on (G.Date = FR.Date) 
      AND G.[Team ID] = FR.[Team ID] 

Was mache ich hier falsch?

+0

Welche Daabase-Technologie ist das? Musstest du wirklich 3 verschiedene Arten haben? – DavidG

+0

@Jorge Diese Einrückung ist schrecklich, schlimmer als das Original! – DavidG

+2

Sie können 'select *' nicht verwenden, wenn Sie Tabellen mit demselben Feldnamen verknüpfen. Sie müssten die Spaltennamen in der SELECT-Klausel manuell angeben. Sie müssen entweder G.Date oder FR.Date angeben, um die Mehrdeutigkeit zu vermeiden. – Vashi

Antwort

1

diese Abfrage

SELECT * 
      FROM Assignments AS A 
       LEFT JOIN Roster AS R 
        ON (A.[Sales Rep ID] = R.[User ID]) 
        AND (A.Date = R.Date) 

enthält 2-Säule mit dem gleichen Feldnamen, in diesem Fall Datum und wenn Sie G.Date schreiben = FR.Date Sie haben einen mehrdeutigen Verweis auf das Feld Datum Tabelle A oder R

+0

Ist es möglich für Sie, die überarbeitete Version zu schreiben, wie es aussehen sollte? –

+0

Ist es Ihnen möglich, die überarbeitete Version zu schreiben, wie es aussehen sollte? – shawnt00

0

Sie müssen dies nicht eine Unterabfrage für, obwohl MS Access hat zusätzliche Klammern im FROM Klausel erfordern:

SELECT * 
FROM (Goals as G LEFT JOIN 
     Assignments AS A 
     ON G.Date = A.Date AND G.[Team ID] = A.[Team ID] 
    ) LEFT JOIN 
    Roster as R 
    ON A.[Sales Rep ID] = R.[User ID] AND A.Date = R.Date; 

Es ist unklar, woher [Team ID] stammt, daher müssen Sie diese Bedingung möglicherweise in die zweite ON-Klausel einfügen.

+0

Ich habe es versucht und keinen Erfolg –

+0

@JesseNarang Ist es nur die fehlende eckige Klammer nach '[User ID'? – shawnt00

+0

@ shawnt00 Wenn ich auf Ausführen klicke, erscheint ein Dialogfeld mit der Aufschrift "Parameterwert für A.Datum eingeben" –

Verwandte Themen