如何对多个表使用分组依据的联接语法

时间:2018-11-07 11:02:25

标签: php mysql group-by left-join multiple-tables

我有3个表格,adjustinlines,项目和项移动 我正在寻找的是我需要从表中选择: Adjustinline中带有描述的所有行,以及来自项目移动表sum(qty)-sum(qtyout)的现有数量的项目表中的描述,按物料编号和仓库编号分组。

调整行

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

如果itemmovement表中不存在itemid,则该行不会出现,因为代码使用的是Join Inner。

2 个答案:

答案 0 :(得分:1)

最后,它已经解决了,下面是代码:

   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

感谢所有人

答案 1 :(得分:0)

由于您在GROUP BY表中的itemv列中,如果该表中没有条目,则不存在任何组。