2015-05-07 5 views
0

У меня проблема. Я хочу обернуть запрос в представление. Для этого мне нужно преобразовать подзапросы внутри FROM. Мой запрос:mysql: UNION GROUP BY без подзапроса

SELECT 
    b.id, 
    b.summe, 
    getBauNrKomplett(b.id) as bauNrKomplett, 
    b.parent_id 
FROM (
     SELECT 
      pt.id, 
      pt.parent_id, 
      SUM(m.menge*p.preis_kostenanschlag) as summe 
     FROM menge m 
     join projektposition p ON (m.projektposition_id=p.id) 
     join positionstyp pt on (p.positionstyp_id=pt.id) 
     GROUP BY pt.id 
    UNION 
     SELECT 
      pt2.id, 
      pt2.parent_id, 
      null as summe 
     FROM positionstyp pt2 
    ) b 
GROUP BY b.id 

Я не нахожу другую возможность. Мне нужно обернуть инструкцию UNION из-за GROUP BY.

Может ли кто-нибудь представить себе другое обходное решение?

Спасибо и наилучшие пожелания, Tobias

+0

Посмотреть DISTINCT. MySQL поддерживает это злоупотребление предложением GROUP BY. Он даже оптимизирует его удивительно хорошо, но это не то, для чего он нужен. – Strawberry

ответ

0

Я считаю, что это равно. Если нет - можете ли вы предоставить sqlfiddle некоторые данные и объяснения?

SELECT 
     pt.id, 
     pt.parent_id, 
     SUM(IF(m.menge IS NULL,0,m.menge*p.preis_kostenanschlag)) as summe, 
     getBauNrKomplett(p.id) as bauNrKomplett, 
    FROM positionstyp pt 
    LEFT JOIN projektposition p 
    ON (p.positionstyp_id=pt.id) 
    LEFT JOIN menge m 
    ON (m.projektposition_id=p.id) 
    GROUP BY pt.id 
+0

Perfect. Он работает с этим кодом (полученный от вашего, только две небольшие исправления). 'ВЫБОР \t pt.id, \t pt.parent_id, \t СУММ (ЕСЛИ (m.menge IS NULL, 0, m.menge * p.preis_kostenanschlag)), как Самме, \t getBauNrKomplett (pt.id), как bauNrKomplett FROM positionstyp pt LEFT JOIN projektposition p ON (p.positionstyp_id = pt.id) LEFT JOIN menge m ON (m.projektposition_id = p.id) GROUP BY pt.id ' – dobberph