Выберите счетчик (*) и «объедините» более трех таблиц

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

У меня есть 3 таблицы, к которым мне нужно присоединиться, чтобы получить ожидаемые данные ( Рабочий процесс , Сообщение и Message_Workflow_Relation ).

Я хочу получить количество рабочих процессов, сгруппированных по статусу + одно поле подключенной таблицы Сообщение в моем результате ( related_name ). К сожалению, я не могу изменить структуру таблицы, поскольку это заданная схема продукта, который мы используем.

Моя структура таблицы выглядит так:

Рабочий процесс:

id | workflow_id | starttime | endtime | status
------------------------------------------------------
1  |          22 |         0 |     200 |     OK
2  |          23 |       220 |     920 |  ERROR
3  |          55 |       202 |     588 |     OK

Message_Workflow_Relation:

id | message_id | workflow_id |
-------------------------------
1  |        122 |          22 |
2  |        235 |          22 |
3  |        456 |          22 |
4  |        982 |          22 |
5  |        444 |          23 |
6  |        445 |          23 |
7  |        585 |          55 |
8  |        738 |          55 |
9  |        399 |          55 |

Сообщение:

id | message_id | starttime | endtime | adapter | related_name |
----------------------------------------------------------------
 1 |        122 |         0 |    2335 |      wf |   workflow_1 |
 2 |        235 |       222 |    1000 |   other |        other |
 3 |        456 |       343 |    2330 | another |      another |
 4 |        982 |       222 |    2200 |      wf |   workflow_1 |
 5 |        444 |      2223 |    3333 |      wf |   workflow_2 |
 6 |        445 |      1123 |    1244 |  manual |       manual |
 7 |        585 |      5555 |    5566 |      wf |   workflow_1 |
 8 |        738 |       655 |     999 |      wf |   worfklow_1 |
 9 |        399 |      6655 |    7732 | another |      another |

Это должно вернуть следующий результат:

count(*) | related_name | status |
----------------------------------
       2 |   workflow_1 |     OK |
       1 |   workflow_2 |  ERROR |

Я застрял в этом следующем утверждении, но я не знаю, как сделайте выбор в adapter = wf unique для каждого рабочего процесса:

select distinct
  count(*),
  m.related_name,
  w.status
from
  workflow as w,
  message as m,
  msg_bpm_rel as rel
where rel.workflow_id = w.workflow_id
  and rel.message_id = m.message_id
  and m.adapter = 'PE'
group by m.related_name,w.status

Это вернет мне (4 workflow_1 вместо 2):

count(*) | related_name | status |
----------------------------------
       4 |   workflow_1 |     OK |
       1 |   workflow_2 |  ERROR |

Как мне сделать правильный запрос добиться этого?

Любая помощь приветствуется.

5
задан Andriy M 1 March 2011 в 15:57
поделиться