我正在尝试根据外部查询的结果运行子查询。我遇到的问题是,我没有使用外部查询,而是从子查询中得到了提示输入值的提示。
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
值,而不是使用外部查询值的子查询。
答案 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