2011-04-03 43 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