【问题标题】:How to use join syntax with group by for multiple tables如何将连接语法与 group by 用于多个表
【发布时间】:2018-11-07 11:02:25
【问题描述】:

我有 3 个表,adjustinlines,Items 和 itemmovement 我正在寻找的是我需要从表中选择: adjustinline 中的所有行与 item 表中的描述以及来自 itemmovement 表 sum(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 表中不存在,则该行不会出现,因为代码正在使用 join Inner。

【问题讨论】:

  • 哪个 RDBMS ?请标记您正在使用的那个。
  • 这似乎是一个常见问题,人们需要多个连接+聚合的连接,但他们尝试累积地进行聚合。基本调试说,在向代码添加更多内容时查看结果,并查看导致意外结果的添加内容的输入。请阅读并根据minimal reproducible example 采取行动--剪切、粘贴和可运行代码以及预期输出和规范。此外,如果您在 Google 上搜索了许多清晰、简洁、具体的问题/问题/目标的措辞,无论是否包含您的姓名/字符串,您都会找到答案。

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


【解决方案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

谢谢大家

【讨论】:

  • 您可以(并且应该)接受您自己的答案来结束这个问题。
【解决方案2】:

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

【讨论】:

  • 即使itemv中没有条目,我如何显示adjustinlines,并且如果有整数,它将总结符合itemid和warehouseid的数字?
猜你喜欢
  • 2018-05-03
  • 2021-12-14
  • 2019-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多