MySQL从两个表查询

时间:2018-11-13 13:01:23

标签: mysql

我有2个用SQL创建的表。第一个具有唯一的ID和提供者的名称。第二个是产品名称,产品数量和提供者的ID。
我需要一个查询,该查询可以告诉我每个提供商的名称以及他们拥有的产品总金额。

例如:

CREATE TABLE IF NOT EXISTS provider  
(id int unique auto_increment primary key,  
name char(50));  

CREATE TABLE IF NOT EXISTS product  
(id int unique auto_increment primary key,  
name char(30),  
provider_id int NOT NULL,  
amount int NOT NULL);  

Provider: (id, name)  
1 Mike  
2 Peter  
3 John

Product: (id, name, provider_id, amount)  
1 RedCar 1 100  
2 BlueCar 1 50  
3 RedCar 3 35  
4 OrangeCar 2 500  
5 GreenCar 3 250  

Query:  
Mike 150  
Peter 500  
John 285  

2 个答案:

答案 0 :(得分:0)

您需要一个简单的LEFT JOINGROUP BY聚合。 LEFT JOIN将确保对提供者负责,即使他/她没有任何产品。

SUM()函数用于计算特定amount的{​​{1}}的总和。我们可以使用COALESCE()函数来处理provider的值。对于没有提供者产品的情况,NULL将返回SUM()

NULL

P.S。。建议在多表查询的情况下使用Aliasing,以确保代码清晰(可读)并避免歧义行为。

P.P.S。。如果您不想列出没有产品的提供商,您可以将SELECT pvd.id, pvd.name, COALESCE(SUM(pdt.amount),0) AS total_amount FROM Provider AS pvd LEFT JOIN Product AS pdt ON pdt.provider_id = pvd.id GROUP BY pvd.id, pvd.name 更改为LEFT JOIN,并摆脱INNER JOIN函数的用法。

答案 1 :(得分:0)

这是SQL查询,可根据您的需要给出结果。

SELECT pr.name,SUM(p.amount) as total_amount FROM `provider` pr LEFT JOIN `product` p ON p.provider_id = pr.id where 1 GROUP BY pr.id