Выражение соединения SQL не поддерживается

#sql #ms-access #join #left-join

#sql #ms-access #Присоединиться #левое соединение

Вопрос:

Ниже приведен мой запрос:

 SELECT 
   UT.AgentName AS [Agent Name], 
   UT.TeamName AS Team, 
   Format(Now(),"Short Date") AS [As Of], 
   Sum(I.RegPointValue) AS Points
FROM 
   (SELECT 
       UU.AgentID, 
       (Nz(UU.LastName,'') ", " Nz(UU.FirstName,'')) AS AgentName , 
       TT.TeamName 
    FROM 
       Users AS UU 
      INNER JOIN 
       Teams AS TT 
      ON UU.TeamID = TT.TeamID) AS UT 
 LEFT JOIN 
    (InfractionTypes AS I 
   INNER JOIN 
      (DateCodes AS D 
     INNER JOIN 
        AquiredInfractions AS AI 
     ON D.DateID = AI.DateID) 
   ON I.InfractionID = AI.InfractionID)
 ON UT.AgentID = AI.AgentID
WHERE (((D.DateValue)>=#4/1/2014#))
GROUP BY UT.TeamName, UT.AgentName, I.RegPointValue;
 

Что это делает, так это суммирует все баллы, которые человек получит в зависимости от нарушений посещаемости, которые он получил. Если я изменю LEFT JOIN на INNER JOIN запрос, он будет работать, но возвращает только имена людей, которые получили нарушения посещаемости. Но я бы хотел, чтобы оно возвращало имена всех пользователей и имело 0 для их баллов, если они их не получили.

Ошибка, которую я получаю при попытке сохранить или выполнить Join expression not supported . Я пытался заставить это работать в течение последних нескольких часов, изменяя порядок соединений, но безрезультатно. Использование MS-Access 2013.

Ответ №1:

Вам не хватает некоторых псевдонимов.

Каждому внутреннему запросу, используемому в качестве таблицы, должен быть присвоен псевдоним, и при их объединении вы должны использовать этот псевдоним и только выбранные столбцы по условию соединения.

Например, добавьте псевдонимы к этим строкам:

 ...
    ON D.DateID = AI.DateID) AS SOMETHING_1
  ON I.InfractionID = AI.InfractionID) AS SOMETHING_2
 

и т. д

Комментарии:

1. После сна я понял, что вы имели в виду, и заставил его работать. Спасибо.