Объединить несколько запросов в postgres

У меня 2 запроса.
Запрос 1: —

select mr.id,count(ml.id) as labor_cnt
from mreq Mr
join mlbr ml on Mr.id = ml.mrid
where Mr.id in(1235,3355)
group by Mr.id

Запрос 2: —

select mr.id,count(mm.id) as mtrial_cnt
from mreq Mr join mmrm mm on Mr.id = mm.mrid
where Mr.id in(1235,3355)
group by Mr.id

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

0

Решение

Так как вы группируете по mr.id в обоих запросах я предполагаю, что вы хотите получить что-то вроде:

 mr.id | labor_cnt | mtrial_cnt
--------------------------------
1 |         5 |          3
2 |      null |          6
3 |         4 |          2
4 |         3 |       null
...

Если это то, что вы ищете, то вы можете комбинировать запросы с общими табличными выражениями. Что-то вроде:

WITH labor as (
SELECT mr.id AS mrid, count(ml.id) AS labor_cnt
FROM mreq mr JOIN mlbr ml ON mr.id = ml.mrid
WHERE mr.id IN (1235, 3355)
GROUP BY mr.id),

mtrial as (
SELECT mr.id AS mrid, count(mm.id) AS mtrial_cnt
FROM mreq mr JOIN mmrm mm ON mr.id = mm.mrid
WHERE mr.id in (1235, 3355)
GROUP BY mr.id)

SELECT COALESCE(l.mrid, m.mrid), l.labor_cnt, m.labor_cnt
FROM labor l FULL OUTER JOIN mtrial m ON mrid
ORDER BY mrid;

Отредактировано, чтобы добавить

Похоже, вы используете MySQL, а MySQL не поддерживает общие табличные выражения. MySQL поддерживает подзапросы, поэтому это может сработать (примечание: я не проверил синтаксис, поскольку у меня нет доступного экземпляра MySQL):

SELECT COALESCE(l.mrid, m.mrid), l.labor_cnt, m.labor_cnt
FROM
(SELECT mr.id AS mrid, count(ml.id) AS labor_cnt
FROM mreq mr JOIN mlbr ml ON mr.id = ml.mrid
WHERE mr.id IN (1235, 3355)
GROUP BY mr.id) AS labor

FULL OUTER JOIN

(SELECT mr.id AS mrid, count(mm.id) AS mtrial_cnt
FROM mreq mr JOIN mmrm mm ON mr.id = mm.mrid
WHERE mr.id in (1235, 3355)
GROUP BY mr.id) AS mtrial

ON mrid

ORDER BY mrid;
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]