首页 > 解决方案 > 如何将连接语法与 group by 用于多个表

问题描述

我有 3 个表格,adjustinlines,Items 和 itemmovement 我正在寻找的是我需要从表格中进行选择:adjustinline 中的所有行都带有来自 item 表格的描述以及来自 itemmovement 表格总和的现有数量(qty)-sum(qtyout) 按 itemid 和 warehouseid 分组。

调整内联

itemid  warehouseid adjustbyquantity

1          2           5
1          1           3
2          2           4
3          1           5

项目

Id        description

1         Item 1
2         Item 2
3         Item 3

物品移动

itemid  warehouseid qtyin   qtyout

1          1         3  
1          1                  2
1          2         3  
1          2                  1
2          2         1

请求查看

Description warehouseid Onhandqty   Adjustbyqty

Item 1         2          2             5
Item 1         1          1             3
Item 2         2          1             4
Item 3         1          0             5

我正在尝试使用这两种方式,但它们都没有给我正确的结果

SELECT sum(itemv.qtyin) sum(itemv.qtyout),adjo.warehouseid,adjo.itemid,
adjo.adjustbyquantity,itm.description

                        FROM adjustoutcopy adjo

                        LEFT JOIN  itemmovement AS itemv
                            ON  adjo.itemid=itemv.itemid AND 
                                adjo.warehouseid=itemv.warehouseid
                        LEFT JOIN  items AS itm
                            ON adjo.itemid=itm.Id



                        group by itemv.itemid,itemv.warehouseid 
                        ORDER BY adjo.Id DESC

如果 itemid 不存在于 itemmovement 表中,则不会出现该行,因为代码使用了连接 Inner 。

标签: phpmysqlgroup-byleft-joinmultiple-tables

解决方案


终于解决了,代码如下:

   SELECT itm.description,adjst.warehouseid,sumofqty,adjst.quantity

            FROM adjustoutcopy adjst
           LEFT JOIN (
              SELECT itemid,warehouseid,sum(qtyin)-sum(qtyout) AS sumofqty
              FROM itemmovement
              GROUP BY itemid,warehouseid
            ) s ON (adjst.codeid = s.itemid) AND
                    (adjst.warehouseid = s.warehouseid)
            LEFT JOIN items AS itm
                ON adjst.codeid=itm.Id

谢谢大家


推荐阅读