mysql从两个表执行查询

ccrfmcuu  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(327)

我有两个用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
gfttwv5a

gfttwv5a1#

这是根据您的需要给出结果的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
8xiog9wr

8xiog9wr2#

你需要一个简单的 LEFT JOINGROUP BY 聚合。 LEFT JOIN 即使供应商没有任何产品,他/她也将确保向供应商交代。 SUM() 函数用于计算 amount 对于特定的 provider . 我们可以用 COALESCE() 要处理的函数 NULL 价值观。 SUM() 会回来的 NULL 对于供应商没有产品的情况。

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

p、 建议在多表查询的情况下使用别名,以提高代码的清晰度(可读性)并避免模棱两可的行为。
p、 另外,如果您不想列出没有产品的供应商;你可以改变 LEFT JOININNER JOIN ,并摆脱 COALESCE() 函数用法。

相关问题