Внутреннее соединение и левое соединение на 5 таблицах в Access с использованием SQL - PullRequest
2 голосов
/ 26 мая 2020

Я пытаюсь получить доступ к данным из следующих таблиц:

  1. OrgPlanYear
  2. ProjOrgPlnYrJunction
  3. D C
  4. DCMaxEEContribLevel
  5. DCNonDiscretionaryContribLevel

По сути, мне нужно внутреннее объединение OrgPlanYear + D C и ProjOrgPlnYrJunction, затем мне нужно присоединиться к оставшимся таблицам (таблицы 4 и 5) влево, поскольку таблицы 1-3 содержат все нужные мне строки и только некоторые из них содержат данные в таблицах 4-5. Мне нужно несколько переменных из каждой таблицы. Мне также нужно, чтобы функция WHERE присутствовала во всех полях (то есть мне нужны все эти данные для выбранной группы, где projectID = 919).

Пожалуйста, помогите!

I пробовали много вещей с ошибками, включая попытку использовать сторону Design Query (например, проблемы с функцией JOIN, плохо отформатированная функция FROM и т. д. c.)! Вот пример одного, исключающего все необходимые мне переменные:

SELECT 
ProjOrgPlnYrJunction.fkeyProjectID, OrgPlanYear.OrgName, DC.PlanCode, DCNonDiscretionaryContribLevel.Age,DCNonDiscretionaryContribLevel.Service

FROM 
(((OrgPlanYear INNER JOIN DC ON OrgPlanYear.OrgPlanYearID = DC.fkeyOrgPlanYearID) INNER JOIN ProjOrgPlnYrJunction ON OrgPlanYear.OrgPlanYearID = ProjOrgPlnYrJunction.fkeyOrgPlanYearID) 

LEFT JOIN
(SELECT DCNonDiscretionaryContribLevel.Age AS Age, DCNonDiscretionaryContribLevel.Service AS Service FROM DCNonDiscretionaryContribLevel WHERE ProjOrgPlnYrJunction.fkeyProjectID)=919) 

LEFT JOIN (
SELECT DCMaxEEContribLevel.EEContribRoth FROM EEContribRoth WHERE ProjOrgPlnYrJunction.fkeyProjectID)=919)

ORDER BY OrgPlanYear.OrgName;

1 Ответ

2 голосов
/ 27 мая 2020

Основные проблемы с вашим запросом:

  • Отсутствуют предложения ON для каждого LEFT JOIN.
  • Ссылки на другие столбцы таблицы в SELECT и WHERE другого подзапрос (например, FROM DCNonDiscretionaryContribLevel WHERE ProjOrgPlnYrJunction.fkeyProjectID).
  • Несовпадающие круглые скобки вокруг подзапросов и объединений в соответствии с требованиями Access SQL.

См. скорректированный ниже SQL, который теперь использует короткие псевдонимы таблиц. Обязательно укажите в предложениях SELECT и ON соответствующие столбцы.

SELECT p.fkeyProjectID, o.OrgName, DC.PlanCode, dcn.Age, dcn.Service, e.EEContribRoth

FROM (((OrgPlanYear o
INNER JOIN DC 
   ON o.OrgPlanYearID = DC.fkeyOrgPlanYearID) 
INNER JOIN ProjOrgPlnYrJunction p
   ON o.OrgPlanYearID = p.fkeyOrgPlanYearID) 

LEFT JOIN
  (SELECT Age AS Age, Service AS Service 
   FROM DCNonDiscretionaryContribLevel
   WHERE fkeyProjectID = 919) AS dcn
     ON dcn.fkeyProjectID = p.fkeyOrgPlanYearID)

LEFT JOIN 
  (SELECT EEContribRoth 
   FROM EEContribRoth 
   WHERE fkeyProjectID = 919) AS e
     ON e.fkeyProjectID = p.fkeyProjectID

ORDER BY o.OrgName;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...