使用外部查询结果的MS Access SQL子查询

时间:2019-04-10 23:40:28

标签: sql ms-access

我正在尝试根据外部查询的结果运行子查询。我遇到的问题是,我没有使用外部查询,而是从子查询中得到了提示输入值的提示。

SELECT Facilities.CustomerName, Facilities.FacilityName,
   Facilities.AnnualPlan, Facilities.AppCo1, 
   (SELECT YeildDB.CornYield
    FROM YeildDB
    WHERE Facilites.AppCo1 = YeildDB.FIPS) AS Expr1
FROM Facilities

目标是子查询应使用Facilities.AppCo1中的值与YeildDB.FIPS中的值匹配,然后返回YeildDB.CornYeild中的相应值。

当前,我得到提示,要求输入YeildDB.FIPS值,而不是使用外部查询值的子查询。

2 个答案:

答案 0 :(得分:2)

您的代码应该可以使用。但是您也可以使用LEFT JOIN来表达这一点:

SELECT Facilities.CustomerName, Facilities.FacilityName,
       Facilities.AnnualPlan, Facilities.AppCo1, 
       YeildDB.CornYield
FROM Facilities LEFT JOIN
     YeildDB
     ON Facilties.AppCo1 = YeildDB.FIPS;

我注意到您拼错了Facilities,这可能就是您的版本无法正常工作的原因。这是使用表别名的原因之一:

SELECT f.CustomerName, f.FacilityName,
       f.AnnualPlan, f.AppCo1, 
       y.CornYield
FROM Facilities as f LEFT JOIN
     YeildDB as y
     ON f.AppCo1 = y.FIPS;

答案 1 :(得分:0)

您的子查询可能返回多个值,因此提示要求您指定所需的值。您可以通过指定顶部1来解决此问题(或至少隐藏此问题):

SELECT Facilities.CustomerName, Facilities.FacilityName,
   Facilities.AnnualPlan, Facilities.AppCo1, 
   (SELECT TOP 1 YeildDB.CornYield
    FROM YeildDB
    WHERE Facilites.AppCo1 = YeildDB.FIPS) AS Expr1
FROM Facilities