Вложенный запрос MS Access SQL с использованием результата внешнего запроса

#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