通过mysql php连接3个表和组

shstlldc  于 2021-09-29  发布在  Java
关注(0)|答案(2)|浏览(272)

我使用的是codeigniter,我想求和(进货)和求和(出货)以及按id_barang分组:
桌上存货
代码名称TOCKB01Book40
表存货
代码名称库存inb01book20b01book10
餐桌缺货
代码名称存储outb01book5b01book10
我想要结果:总结
代码名称StockStock instock超过StockB01书籍40301555
上次库存=(库存+入库)-出库
我可以加入3个表,但总和(库存)和总和(库存)如下:
代码名称StockStock instock超过stockb01book40603070

sq1bmfud

sq1bmfud1#

根据您想要的输出,这里使用内部联接。但若代码(b01)不存在于stock_in和stock_out表中,则使用左联接而不是内部联接。在金额字段中使用合并函数来忽略null。

-- MySQL
SELECT s.code, s.name, s.stock, si.stock_in, so.stock_out
     , (s.stock + si.stock_in - so.stock_out) last_stock
FROM Stock s
INNER JOIN (SELECT code, MAX(name) name
                 , SUM(stock_in) stock_in
            FROM Stock_in
            GROUP BY code) si
        ON s.code = si.code
INNER JOIN (SELECT code, MAX(name) name
                 , SUM(stock_out) stock_out
            FROM Stock_out             
            GROUP BY code) so
            ON s.code = so.code;

请检查url的结果http://sqlfiddle.com/#!9/6dc765/4
请检查使用左联接的结果http://sqlfiddle.com/#!9/9e97ef3/2

kcwpcxri

kcwpcxri2#

这里有一种方法(使用rahulbiswas深思熟虑地提供的小提琴)。。。

SELECT s.code   
     , s.name
     , s.stock
     , SUM(CASE WHEN direction = 'in' THEN qty END) stock_in
     , SUM(CASE WHEN direction = 'out' THEN qty END) stock_out
     , s.stock+SUM(CASE WHEN direction = 'in' THEN qty END)-SUM(CASE WHEN direction = 'out' THEN qty END) balance
  FROM stock s
  JOIN 
     ( SELECT code
            , name
            , stock_in qty
            , 'in' direction
         FROM stock_in
        UNION ALL
       SELECT code
            , name
            , stock_out 
            , 'out' 
         FROM stock_out
    ) x
   ON x.code = s.code;

http://sqlfiddle.com/#!9/6dc765/10

相关问题