2017-01-31 4 views
1

Ich arbeite in Microsoft Access.SQL Access: Mehrere innere Join zwischen zwei Tabellen

Ich habe zwei Tabellen, Produktion und Reagenzien. wie unten

Reagents 
- Reagent Reference ID (text) 
- Supplier (text) 

Production 
- Production Reference ID (text) 
- C Reference ID (text) (matches Reagents.Reagent Reference ID) 
- P Reference ID (text) (matches Reagents.Reagent Reference ID) 

Ich versuche, eine Abfrage zu erstellen, die Lieferanten von C und P (von Reagenzien) in die Produktion Referenz-ID (aus der Produktion), zu verbinden.

Query Output 
- Production Reference ID 
- C Supplier 
- P Supplier 

Unten ist, was ich bisher habe, aber es sagt mir, dass ich einen Operator vermisse.

SELECT C.Supplier as 'C Supplier', P.Supplier as 'P Supplier' 
FROM Production 
INNER JOIN Reagents AS C ON C.Reagent Reference ID=Production.C Reference ID 
INNER JOIN Reagents AS P ON P.Reagent Reagent Reference ID=Production.P Reference ID 
WHERE Production.Production Reference ID=? 

Vielen Dank im Voraus!

+0

Also C Referenz-ID und P Referenz-ID sind identisch? – Magisch

+0

C Die Referenz-ID entspricht C00001, während die P-Referenz-ID in der Zeile von P00001 steht und P und C nicht übereinstimmen. Sowohl die P-Referenz-ID als auch die C-Referenz-Referenz-ID sind unter der Reagenz-Referenz-ID enthalten. –

+0

Nicht sicher, ob Sie unbedingt einen Join benötigen, aber ich habe eine Lösung mit Unterabfragen gegeben. Ich habe es mit einer ähnlichen Tabelle in meiner eigenen Access-Datenbank getestet und es hat funktioniert. Vorsicht vor Langsamkeit, wenn Sie ein paar tausend Datensätze überschreiten und keine wo bedingte obwohl – Magisch

Antwort

2

Sie können versuchen, diese Methode (diese Unterabfragen verwendet, passen sie es sein kann, etwas langsam, wenn die Tabelle groß ist):

SELECT Production.[Production Reference ID], 
(SELECT Reagents.Supplier FROM Reagents WHERE Reagents.[Reagent Reference ID] = Production.[C Reference ID]) as CSupplier, 
(SELECT Reagents.Supplier FROM Reagents WHERE Reagents.[Reagent Reference ID] = Production.[P Reference ID]) as PSupplier 
FROM Production; 

Edit: Bei einigen Tests fand ich heraus, wie es funktioniert in JOIN auch, und es ist viel schneller dann Methode 1:

SELECT C.Supplier as 'C Supplier', P.Supplier as 'P Supplier' 
FROM (Production 
INNER JOIN Reagents AS C ON C.[Reagent Reference Number]=Production.[C Reference Number]) 
INNER JOIN Reagents AS P ON P.[Reagent Reagent Reference Number]=Production.[P Reference Number] 
WHERE Production.[Production Reference Number]=? 

MS Access Klammern benötigt, wenn mehr als eine in einer Abfrage JOIN verwenden.

+0

Das funktioniert perfekt für mich - die Tische werden nie zu groß werden, also sollte das auf absehbare Zeit funktionieren. Danke vielmals! –

+0

@JamesBoxall Beachten Sie, dass Sie eine der Antworten akzeptieren können, indem Sie auf das grüne Häkchen neben den Stimmen klicken. Ich denke auch, dass Stefans Antwort funktionieren wird, wenn man die richtigen Klammern setzt (der Zugriff ist mit diesen knackig). – Magisch

+0

@JamesBoxall Ich habe auch eine JOIN-Version gefunden, es fehlten Klammern. Dieser ist auch schneller. – Magisch

0

Versuchen Sie, Ihre Feldnamen in eckige Klammern [] einzufügen, wie unten.

SELECT C.Supplier as 'C Supplier', P.Supplier as 'P Supplier' 
FROM Production 
INNER JOIN Reagents AS C ON C.[Reagent Reference Number]=Production.[C Reference Number] 
INNER JOIN Reagents AS P ON P.[Reagent Reagent Reference Number]=Production.[P Reference Number] 
WHERE Production.[Production Reference Number]=? 
+0

Das sieht für mich wie es sollte funktionieren, aber es gibt mir den Fehler: Syntaxfehler (fehlende Operator) in Abfrageausdruck 'C. [Reagent Reference Number ] = Produktion [C-Referenznummer] INNER JOIN Reagenzien AS P ON P. [Referenznummer des Reagenzienreagenzes] = Produktion. [P ​​Referenznummer '. –

+0

Sie haben einen gemeinsamen Fehler drin. MS Access erfordert Klammern, wenn Sie mehr als einen JOIN verwenden. – Magisch

+0

Ich brauchte Klammern um meine erste innere Verbindung, wie folgt: FROM (Produktion INNER JOIN Reagenzien AS C. ON C. [Reagenzreferenznummer] = Produktion. [C Referenznummer]) INNER JOIN ... Mit den Klammern in Platz, das funktioniert super! - Entschuldigung Magisch, habe gerade erst Ihren Kommentar bemerkt! –