2017-10-25 21 views
0

私は近いですが、私はこのSQLクエリを把握できないようです。 SELECTと関連するFROMテーブルが正しくありますが、私のサブクエリ構造が壊れていると思います。MS Accessの相関サブクエリ構造SQL

質問:SQL文を作成して、各原材料について最も安価な2つのベンダ(サプライヤ)のリストを生成します。結果テーブルに、品目ID、品目説明、仕入先ID、仕入先名、仕入先単価を表示します。結果テーブルを品目IDとサプライヤーの単価で昇順にソートします。注:原材料に1つの仕入先(仕入先)しかない場合、その仕入先および原材料の単価も結果(出力)テーブルに含まれている必要があります。

は、ここで私が持っているものです:

SELECT Supplies_t.Material_ID, Raw_Materials_t.Material_Description, 
Vendor_t.Vendor_ID, Vendor_t.Vendor_name, Supplies_t.Unit_price 
FROM Supplies_t S1, Raw_Materials_t, Vendor_t 
WHERE Vendor_t.Vendor_ID = Supplies_t.Vendor_ID 
AND Supplies_t.Material_ID = Raw_Materials_t.Material_ID 
AND Supplies_t.Unit_price IN 
    (SELECT TOP 2 Unit_price 
    FROM Supplies_t S2 
    WHERE S1.Material_ID = S2.Material_ID 
    ORDER BY S2.Material_ID ASC, S2.Unit_price ASC) 

答えて

0

あなたの問題を解決することがあり、正しい表の別名を使用します。明示的にJOINの構文を使用する必要があります。

SELECT s.Material_ID, rm.Material_Description, v.Vendor_ID, v.Vendor_name, s.Unit_price 
FROM (Supplies_t s INNER JOIN 
     Raw_Materials_t rm 
     ON s.Material_ID = rm.Material_ID 
    ) INNER JOIN 
    Vendor_t v 
    ON v.Vendor_ID = s.Vendor_ID 
WHERE s.Unit_price IN (SELECT TOP 2 s2.Unit_price 
         FROM Supplies_t s2 
         WHERE s.Material_ID = s2.Material_ID 
         ORDER BY s2.Material_ID ASC, s2.Unit_price ASC 
        );