#sql #ms-access
#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
Цель состоит в том, чтобы вложенный запрос использовал значение from Facilities.AppCo1
для сопоставления со значением in YeildDB.FIPS
, а затем возвращал соответствующее значение in YeildDB.CornYeild
.
В настоящее время я получаю запрос с запросом YeildDB.FIPS
значения вместо вложенного запроса с использованием значения внешнего запроса.
Комментарии:
1. Затем Access не может найти атрибут с именем ‘FIPS’ в этой таблице ‘YeilDB». Проверьте определение таблицы. Это маловероятно, но, возможно, это могло бы помочь
WHERE YeildDB.FIPS = Facilites.AppCo1
вместо этого написать и добавить, что отсутствует третье «я» в «Facilites».
Ответ №1:
Ваш код должен работать. Но вы также можете выразить это с помощью 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. Это работает! Большое вам спасибо… Я, должно быть, смотрел на это в течение часа и пропустил очевидное!
Ответ №2:
Ваш вложенный запрос может возвращать несколько значений, отсюда и запрос с просьбой указать, какое из них вы хотите. Вы можете исправить это (или, по крайней мере, скрыть эту проблему), указав top 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