2017-11-13 4 views
0

複数の左結合を使用してクエリを実行しようとしています。私は、MS Accessにはジョインの周りに()が必要な追加のパラメータがあることを理解しています。そうしないと、「Missing Operator」というエラーが発生しますが、サブクエリを使用しています。私は構文を理解することはできません。助けてもらえますか?ここに私のコードです:サブクエリを使用するMS Accessの複数の左結合

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

助けていただければ幸いです。ありがとう

+0

どこでエラーが発生しますか? SQLをエラーを再現する最小限のセットに縮小しましたか? – nicomp

+0

@nicomp 2番目の結合を追加するとエラーが発生します。最初の結合は正常に動作します。 –

答えて

2

MS Accessの方言は、(ネストされたペアになり得る)テーブルのペアの周りにかっこを必要としますが、一般的なルール(MS Accessの外)としての言語は、サブクエリが含まれるエンティティを示す括弧で囲まれている必要があります。

具体的には、特定のJOIN句の場合、最初の2つの派生テーブルをラップし、外側のかっこを囲まずに外に出す必要があります。ただし、すべてのサブクエリには独自のラップカッコがあります。インデントの下には、かっこのペアを表示しようとします。

最後に、副問合せ内のORDER BYは、外部問合せの順序付けの問題としてのみ必要です。

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

これはそれでした!あなたの明確な説明をありがとう –

+0

優秀!助けてうれしい! – Parfait

関連する問題