【问题标题】:Correlated subquery structure in MS Access SQLMS Access SQL 中的相关子查询结构
【发布时间】:2018-04-05 22:23:56
【问题描述】:

我很接近,但我似乎无法弄清楚这个 SQL 查询。我的 SELECT 和相关的 FROM 表是正确的,但我认为我的子查询结构搞砸了。

问题:编写一条 SQL 语句,为每种原材料生成两个成本最低的供应商(供应商)的列表。在结果表中,显示以下列:材料 ID、材料描述、供应商 ID、供应商名称和供应商的单价。按物料编号和供应商单价升序对结果表进行排序。注意:如果一种原材料只有一个供应商(供应商),那么该供应商及其原材料的单价也应该在结果(产出)表中。

这是我得到的:

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)

【问题讨论】:

    标签: sql ms-access subquery


    【解决方案1】:

    使用正确的表别名可能会解决您的问题。您还应该使用明确的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
                          );
    

    【讨论】: