2011-04-03 42 views
1
SELECT invoices.number_formatted, SUM(invoices_elements.netto) 
FROM invoices 
LEFT JOIN invoices_elements ON invoices_elements_code_invoices_id = invoices_id 
WHERE invoices_enable = 1 
AND invoices_elements_enable = 1 
GROUP BY invoices_elements_code_invoices_id 

如果表「invoices_elements」沒有任何具有「invoices_elements_enable = 1」的行,則此查詢返回NULL - 但我希望「數字格式化」。所以我這樣做:MySQL僅加入選定行

SELECT SUM(netto) 
FROM (invoices) 
LEFT JOIN (SELECT * FROM invoices_elements WHERE invoices_elements_enable = 1) ON invoices_elements_code_invoices_id = invoices_id 
WHERE invoices_enable = 1 
GROUP BY invoices_elements_code_invoices_id 

......這是因爲作品。但是 - 做更好的方法嗎?

回答

2

你可以做

SELECT SUM(netto) 
FROM invoices 
     LEFT JOIN invoices_elements 
     ON invoices_elements_code_invoices_id = invoices_id 
      AND invoices_elements_enable = 1 
WHERE invoices_enable = 1 
GROUP BY invoices_elements_code_invoices_id 

注意限制invoices_elements_enable = 1ON子句中避免查詢轉換爲inner join