php - 在mysql中连接三个表

标签 php mysql

<分区>

我有 3 个表。表 A 有两个字段代码和项目。表 B 有 3 个字段代码,qty_recd 和 recd_dt。表 C 有 3 个字段 Code、qty_sold、sold_dt。我想通过这种方式得到一个结果:

对于表 A 中的每条记录,表 B 中的 qty_recd 之和与表 C 中的 qty_sold 之和。

TABLE-A

code      Item
-----     ------
A1       AMMONIA SOLUTION


TABLE-B

code     qty_recd       recd_dt
-----    --------       -------
A1         5            2013-06-01
A1         8            2013-04-18
A1         3            2013-05-22


TABLE-C

code     qty_sold       sold_dt
-----    --------       -------
A1         1            2013-08-10
A1         4            2013-09-01
A1         2            2013-05-11

我想要这样的结果

code      item            tot_recd       tot_sold
-----    --------         -------       --------
A1     AMMONIA SOLUTION     16             6

我尝试了几种结构,但没有得到想要的输出。请帮助构建SELECT语句

最佳答案

您想将您的主产品列表加入到两个摘要中。 (不要经常在表名中使用连字符!)

其中一个总结是:

   SELECT code, SUM(qty_recd) AS qty_recd
     FROM `TABLE-B`
    GROUP BY code

你可以猜出另一个。

你的整体查询应该是

   SELECT a.code, a.item, b.qty_recd, c.qty_sold
     FROM `TABLE-A` AS a
     LEFT JOIN (
         SELECT code, SUM(qty_recd) AS qty_recd
           FROM `TABLE-B`
          GROUP BY code
     ) AS b ON a.code = b.code
     LEFT JOIN (
         SELECT code, SUM(qty_sold) AS qty_sold
           FROM `TABLE-C`
          GROUP BY code
     ) AS c ON a.code = c.code

这是一个显示它的 SQL Fiddle。 http://sqlfiddle.com/#!2/f6cb7/1/0

您可能天真地只是 JOIN 所有三个表,然后使用 GROUP BY。但是你会总结这个讨厌的叉积派生表:

CODE      qty_recd    qty_sold
A1         5              1
A1         5              4
A1         5              2
A1         8              1
A1         8              4
A1         8              2
A1         3              1
A1         3              4
A1         3              2

例如,此不正确 查询会执行此操作。

      SELECT a.code, a.item, SUM(b.qty_recd), SUM(c.qty_sold) //WRONG!
        FROM `TABLE-A` AS a
   LEFT JOIN `TABLE-B` AS b ON a.code = b.code
   LEFT JOIN `TABLE-C` AS C ON a.code = c.code
    GROUP BY a.code, a.item 

请看这个 fiddle 。 http://sqlfiddle.com/#!2/f6cb7/3/0

这不是你想要的。因此需要汇总子查询。

关于php - 在mysql中连接三个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18673535/

相关文章:

php - 为每个 session 分配随机颜色,用于聊天

从同一域上的另一个页面调用时,PHP 外部 API 访问失败?

mysql - 在 Slick 3.1.0-M1 中使用 java.util.Date

mysql - 当 MAX() 列不存在时如何获取默认值

php - 在 Codeigniter 中从多维数组检索数据

PHP 网站登录错误

php - 如何扩展 FOSUserBundle 的用户实体?

php - 在 MySql 长文本字段中插入数据时获取垃圾值

php - 在 3 个日期范围内搜索记录

mysql - sql查询以获取参加的不同类(class)的数量