Как избежать использования подзапроса в этой ситуации Access SQL

#sql #ms-access-2007

#sql #ms-access-2007

Вопрос:

Привет, у меня есть ситуация, когда мне нужно объединить две таблицы, но отфильтровать значение из третьей таблицы. Как показано ниже:

 SELECT a.Key , (SELECT SUM(B.hours) FROM tableB as B 
                 INNER JOIN tableC as C ON B.List=C.List 
                 WHERE C.Status = 'Approved' AND B.Key LIKE A.key) , 
               (SELECT SUM(B.hours) FROM tableB as B 
                 INNER JOIN tableC as C ON B.List=C.List 
                 WHERE C.Status = 'Pending' AND B.Key LIKE A.key) 
FROM tableA as A GROUP BY A.key
 

есть ли другой способ сделать это без использования коррелированных подзапросов? я бы хотел использовать объединения, но я просто не знаю, как связать таблицу C с этой картинкой.

Заранее спасибо.

Ответ №1:

Подзапрос может быть не такой уж плохой идеей, но вы можете сделать это с помощью условной агрегации:

 SELECT a.Key,
       sum(iif(c.Status = "Approved", B.hours, 0)),
       sum(iif(c.Status = "Pending", B.hours, 0))
FROM tableA as A left join
     (tableB as b inner join
      tableC as c
      on b.list = c.list
     ) 
     on b.key like a.key
GROUP BY A.key;
 

MS Access имеет загадочный синтаксис для объединений, особенно для нескольких объединений. Я думаю, что вышесказанное верно.

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

1. спасибо, Гордон, я не знал, что Access разрешает объединение дочерних таблиц с дочерними таблицами. т.е. я думал, что доступ разрешен только к таблице A, соединяющей таблицу B, и таблице, соединяющей таблицу C . Не так, как ваша таблица ответов A Присоединяется к таблице B, затем внутри (таблица B присоединяется к таблице C). Я собираюсь попробовать это прямо сейчас и вернуться к вам.

2. @Tyrion . , , Access разрешает это. Я просто никогда не уверен, правильно ли я понимаю синтаксис Access. Я стараюсь избегать доступа, предпочитая вместо этого бесплатные версии других баз данных.

3. ну, скобки доставили мне головную боль, тем более, что мне пришлось присоединяться к другим таблицам. но это сработало!. Большое вам спасибо.