php - mysql - 将一个表与另外两个表连接起来

标签 php mysql sql

我有3张 table

Products
[id, name]

Purchases
[id, product_id, quantity, date]

Sales
[id, product_id, quantity, date]

我想列出所有产品以及每种产品的剩余数量。

我已尝试使用以下查询,但它不起作用。

SELECT pr.id, pr.name, (sum(pu.quantity))-sum(s.quantity) as quantity 
FROM `products` pr 
join purchase pu ON pu.product_id = pr.id
left join sales s ON s.product_id = pr.id
GROUP BY pr.id

我知道上面的查询为 purchasesales 创建了重复的行,因为我们将两个表都与产品连接起来。

请帮我写出正确的查询来找到剩余的产品数量

最佳答案

您需要在join 之前聚合。一种方法明确在 from 子句中:

SELECT pr.id, pr.name,
       (coalesce(pu.sumq, 0) - coalesce(s.sumq, 0)) as quantity 
FROM `products` pr left join
     (SELECT pu.product_id, SUM(pu.quantity) as sumq
      FROM purchase pu
      GROUP BY pu.product_id
     ) pu
     ON pu.product_id = pr.id left join
     (SELECT s.product_id, SUM(s.quantity) as sumq
      FROM sales s 
      GROUP BY s.product_id
     ) s
     ON s.product_id = pr.id
GROUP BY pr.id, pr.name;

关于php - mysql - 将一个表与另外两个表连接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33035786/

相关文章:

php - 向下舍入到最接近的 50 或 00 的最简单方法

php - Mysql 查找末尾有多余字符的词/句 PHP

mysql - 检查 MySql 表中的空单元格

mysql - 识别表中的匹配记录

php - BLOB 到字符串或图像/PHP 或 sql

sql - 如何意外删除表中的所有行

php - 插入数据库失败

php - zend框架: how to create trigger "before/after" insert/update

mysql - Cygnus 不保留 MySql 数据库中的数据

PHP 和 MYSQL : Inserting Foreign Key