2017-11-13 2 views
0

Ich versuche, eine Abfrage mit mehreren linken Joins auszuführen. Ich verstehe, dass MS Access zusätzliche Parameter benötigt() um die Joins, sonst bekomme ich einen "Missing Operator" -Fehler, aber ich benutze Sub-Abfragen, die noch mehr Komplexität hinzufügen. Ich kann die Syntax nicht herausfinden. Kann jemand helfen? Hier ist mein Code:Mehrere Links Joins in MS Access mit Unterabfragen

SELECT nPrice.Commodity AS Commodity, nPrice.CodeName AS CodeName, nPrice. 
[P/N] AS PartNumber, nPrice.Price AS Today, oPrice.Price AS Tomorrow, 
pPrice.Price AS Next 
FROM 
    SELECT * 
    FROM qryPrice 
    WHERE [MyDate] = #9/1/2017# AND [Type] = 'Net Price' AND [Commodity] = 
    'commodityX' 
    ORDER BY CodeName ASC AS nPrice 
    LEFT JOIN SELECT * 
      FROM qryPrice 
      WHERE [MyDate] = #1/1/2018# AND [Type] = 'Net Price' 
      ORDER BY CodeName ASC AS oPrice 
      ON nPrice.[P/N] = oPrice.[P/N] 
      LEFT JOIN SELECT * 
         FROM qryPrice 
         WHERE [MyDate] = #2/1/2018# AND [Type] = 'Net Price' 
         ORDER BY CodeName ASC AS pPrice 
         ON oPrice.[P/N] = pPrice.[P/N] 
ORDER BY nPrice.[P/N]; 

Jede Hilfe sehr geschätzt wird. Thanks

+0

Woher erhalten Sie den Fehler? Haben Sie das SQL auf eine minimale Menge reduziert, die den Fehler noch reproduziert? – nicomp

+0

@nicomp Der Fehler beginnt, wenn ich den zweiten Join hinzufüge. Der erste Join funktioniert gut. –

Antwort

2

Während MS Access Dialekt Klammern um Paare von Tabellen erfordert (die verschachtelte Paare sein können), SQL die Sprache als eine allgemeine Regel (außerhalb von MS Access) erfordert Unterabfragen in Klammern eingeschlossen werden, die eine enthaltene Entität angibt.

Konkret müssen Sie für Ihre speziellen JOIN-Klauseln nur die ersten beiden abgeleiteten Tabellen umbrechen und ohne äußere umschließende Klammern nach draußen gehen. Alle Unterabfragen haben jedoch eigene umschlossene Klammern. Unter dem Einrückungsversuch wird versucht, Klammerpaarungen anzuzeigen.

Schließlich ORDER BY in Unterabfragen sind nicht notwendig, da nur äußeren Abfrage Reihenfolge Angelegenheiten.

SELECT nPrice.Commodity AS Commodity, nPrice.CodeName AS CodeName, 
     nPrice.[P/N] AS PartNumber, nPrice.Price AS Today, oPrice.Price AS Tomorrow, 
     pPrice.Price AS Next 
FROM 
    (
    (SELECT * 
    FROM qryPrice 
    WHERE [MyDate] = #9/1/2017# AND [Type] = 'Net Price' AND [Commodity] = 'commodityX' 
    ) AS nPrice 

    LEFT JOIN   
    (SELECT * 
     FROM qryPrice 
     WHERE [MyDate] = #1/1/2018# AND [Type] = 'Net Price' 
    ) AS oPrice 
    ON nPrice.[P/N] = oPrice.[P/N] 
) 

LEFT JOIN 
    (SELECT * 
    FROM qryPrice 
    WHERE [MyDate] = #2/1/2018# AND [Type] = 'Net Price' 
    ) AS pPrice 

ON oPrice.[P/N] = pPrice.[P/N] 

ORDER BY nPrice.[CodeName], pPrice.[CodeName], oPrice.[CodeName], nPrice.[P/N]; 
+0

Das hat es geschafft! Danke für Ihre klare Erklärung –

+0

Ausgezeichnet! Froh, dass ich Helfen kann! – Parfait

Verwandte Themen