2015-05-07 110 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 

我没有找到其他possility。由于GROUP BY,我需要包装UNION语句。

有人可以想象另一种解决方法吗?

非常感谢和问候, 托比亚斯

+0

参见DISTINCT。 MySQL支持滥用GROUP BY子句。它甚至优化它非常好,但它不是它的目的。 – Strawberry

回答

0

我beleive这是相等的。如果不是的话 - 你能提供一些数据和解释给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

完美。它适用于这个代码(从你的代码派生出来,只需要两个小小的更正)。 'SELECT \t pt.id, \t pt.parent_id, \t SUM(IF(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