2016-06-18 6 views
0

У меня есть 2 вопроса. Запрос 1: -Объединить несколько запросов в postgres

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

что вы называете комбайном? .. как результаты ищут оба вопроса? –

ответ

1

Поскольку вы группирование по 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; 

Edited добавить

Похоже, вы используете 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; 
+0

Да что-то вроде этого я ищу. Мощь, которая работает для меня !! Благодарю. –

+0

Получение # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «work as» (SELECT mr.id AS mrid, count (ml.id) AS labor_cnt FROM 'в строке 1 –

+0

Вы обозначили это как 'postgresql', поэтому я использовал синтаксис postgres.Я не уверен, что эквивалентный синтаксис будет с mysql. – jmelesky