在mysql中连接三个表

man*_*amz 0 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
Run Code Online (Sandbox Code Playgroud)

我想要这样的结果

code      item            tot_recd       tot_sold
-----    --------         -------       --------
A1     AMMONIA SOLUTION     16             6
Run Code Online (Sandbox Code Playgroud)

我尝试了几种结构,但没有获得所需的输出.请帮忙构造SELECT语句

O. *_*nes 5

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

其中一个摘要是:

   SELECT code, SUM(qty_recd) AS qty_recd
     FROM `TABLE-B`
    GROUP BY code
Run Code Online (Sandbox Code Playgroud)

你可以猜到另一个.

你的整体查询应该是

   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
Run Code Online (Sandbox Code Playgroud)

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

您可能会天真地只加入所有三个表,然后使用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
Run Code Online (Sandbox Code Playgroud)

例如,这个不正确的查询会这样做.

      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 
Run Code Online (Sandbox Code Playgroud)

看到这个小提琴. http://sqlfiddle.com/#!2/f6cb7/3/0

那不是你想要的.因此需要汇总子查询.