SQL中有三个不同的表查询

时间:2014-04-24 18:55:07

标签: sql join

表:公司

ID | companyName  
................................  
1  | company1  
2  | company2  
3  | company3  
4  | company4

表:发票

ID | companyID  
................................  
1  | 1  
2  | 1  
3  | 3  
4  | 2

表:invoiceinput

ID | invoiceID | inputTotal  
................................  
1  | 1  | 100  
2  | 1  | 200  
3  | 1  | 123  
4  | 3  | 211  

字段总数

描述:我在表“公司”中有公司基数,发票(在表“发票”中)注意,可以将一些发票应用于一个公司,并将发票内容(在invoiceinput表中)。几个invoiceinput项目可以应用于一个发票。 invoice.companyID上的外键是companies.ID,invoiceinput.invoiceID是invoice.ID。

所以我想要这样的结果:

companyName | sum of totals
...............................................
company1 | 423
company2 | 0
company3 | 0
company4 | 211

因此,总计列的总和应包含的数据是所有发票中所有总计的总和,该数据是针对某个公司的。

我希望我描述得很好。

1 个答案:

答案 0 :(得分:1)

试试这个:

对于MySQL:

SELECT Com.CompanyName,IFNULL(SUM(InvIn.InputTotal),0) as SumOfTotal
FROM companies Com LEFT JOIN
Invoice Inv ON Inv.CompanyID=Com.ID LEFT JOIN
InvoiceInput InvIn ON InvIn.InvoiceID=Inv.ID
GROUP BY Com.CompanyName
ORDER BY Com.CompanyName

对于SQL Server,将IFNULL替换为ISNULL

结果:

COMPANYNAME   SUMOFTOTAL
company1      423
company2      0
company3      211
company4      0

请参阅SQL Fiddle中的结果。