Несколько объединений в запросе SQL - PullRequest
2 голосов
/ 04 ноября 2010

Между таблицами A и B существует один ко многим, и снова между таблицами B и C. Мне нужно перечислить все записи в таблице B вместе с их родителями из таблицы A и сумму () для aконкретное поле в C. Как я могу это сделать?

Я думаю, что это что-то вроде:

SELECT A.fldlist, 
       B.fldlist, 
       SUM(C.field)
  FROM A 
  INNER JOIN B ON A.key = b.FK 
  LEFT OUTER JOIN C on B.key = C.FK
  GROUP BY B.field

Есть идеи?Очень ценится ...

Ответы [ 2 ]

5 голосов
/ 04 ноября 2010

Закрыть, но вам нужно сгруппировать по всем неагрегированным столбцам в вашем SELECT.

SELECT A.fldlist, 
       B.fldlist, 
       SUM(C.field)
  FROM A 
  INNER JOIN B ON A.key = b.FK 
  LEFT OUTER JOIN C on B.key = C.FK
  GROUP BY A.fldlist, B.fldlist
1 голос
/ 04 ноября 2010

Если вы хотите сгруппировать по всем полям в A и B, вы всегда можете сделать это

With tmp as
(
   SELECT c.FK, SUM(C.field) as field
   FROM C
   GROUP BY c.FK
)
SELECT A.*, B.*, tmp.FK, tmp.field
FROM   A 
       INNER JOIN B ON A.key = b.FK
       LEFT OUTER JOIN tmp ON b.key = tmp.FK
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...