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