【问题标题】:Receive All Entries (even 'duplicates' in MySQL Select Statement接收所有条目(甚至是 MySQL Select 语句中的“重复”)
【发布时间】:2016-11-21 13:57:38
【问题描述】:

这是我的 MySQL 查询:

$query = "SELECT
  ws_inventory.id,
  ws_inventory.SKU AS inventory_sku,
  ws_inventory.Quantity AS inventory_quantity,
  ws_mastersku.SKU_1,
  ws_mastersku.SKU_2,
  ws_mastersku.SKU_4,
  ws_mastersku.SKU_3,
  ws_mastersku.MultSKU,
  ws_mastersku.QtySKU,
  ws_mastersku.AltSKU,
  ws_mastersku.SKU,
  ws_sold.SKU AS sold_sku,
  ws_sold.Quantity AS sold_quantity
FROM ws_sold
   LEFT OUTER JOIN ws_mastersku
    ON ws_sold.sku = ws_mastersku.SKU
   LEFT OUTER JOIN ws_inventory
    ON ws_mastersku.SKU_1 = ws_inventory.SKU
    OR ws_mastersku.AltSKU = ws_inventory.SKU
GROUP BY  ws_sold.sku;";

但它只返回 WS16 的第一个实例

即使我的表有两个 WS16 条目

如何修改我的查询以选择所有行? (在我的最后一张图片中,它省略了第 4 行)

新的选择查询应该是这样的(你可以在这里看到第四列)

1   WS16    91  (null)  (null)  (null)  (null)  0   4   WS16    WS16X4-2    WS16X4-2    2
2   WS3     97  (null)  (null)  (null)  (null)  0   2   WS3     WS3X2-4 WS3X2-4 1
3   WS6     95  (null)  (null)  (null)  (null)  0   4   WS6     WS6X4-16    WS6X4-16       1
4   WS16    75  (null)  (null)  (null)  (null)  0   4   WS16    WS16X4-2    WS16X4-2    4

根据 Keith 和 Tim 的友好回复,我尝试了不带 GROUP BY 子句的查询,这是我的结果

这是朝着正确方向迈出的一步,但inventory_quantity 是错误的..

这是因为在我的 PHP 脚本中我正在做

$newQuantity =  $rs['inventory_quantity'] - ($rs['sold_quantity'] * $rs['QtySKU']);

我的while循环中脚本的输出是

UPDATE ws_inventory SET Quantity = 91 WHERE SKU = 'WS16'

紧随其后

UPDATE ws_inventory SET Quantity = 83 WHERE SKU = 'WS16'

问题是因为inventory_quantity 在开始查询时被采用。 第一条语句的数量是 -8(开始 99),第二条语句是 -16(开始 99)。需要知道找出一种获取它的方法,以便在这种情况下语句可以相互配合,并执行 99 - 8 - 16 = 75 而不是仅仅覆盖结果..

【问题讨论】:

  • 你真正想要什么输出?您当前的查询与您使用GROUP BY 的方式有问题。
  • 不...更新您的问题并向我们展示您想要的输出。除非您有不同的期望,否则 Keith 建议完全放弃 GROUP BY 可能是正确的。
  • 您要汇总数量吗?
  • 现在我想起来了,查询不应该对数量做任何特殊的事情。我将此 SELECT 语句与一个 PHP 脚本结合使用,该脚本为我做数学计算。这背后的逻辑是$rs['inventory_quantity'] - ($rs['sold_quantity'] * $rs['QtySKU']);,但我认为这无关紧要,因为我只是遇到了查询问题。
  • 好的,我刚刚发表了这个评论,现在我认为这无关紧要,因为我也许能够找到一种方法来修复 PHP 中的逻辑......但如果有如何在 MySQL 中做到这一点?我在想如果我能在查询中把它记下来会容易得多

标签: mysql


【解决方案1】:

尝试删除 group by 子句。您没有 group by 聚合函数,因此有 group by 子句没有意义。

有关按功能分组的更多详细信息,请参阅https://www.google.com.au/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=group%20by%20aggregate%20functions

【讨论】:

  • 如果您发布了指向 mysql 页面的直接链接并引用了该页面,我会对此表示赞同。
  • 谢谢,这有帮助。在做之前的测试时,我一定把它留在那里了。我已经用这个结果更新了我的问题。
  • 答案实际上是问题标题“接收所有条目(甚至在 MySQL Select 语句中'重复'”。Group by 导致结果被...分组!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-24
  • 1970-01-01
  • 1970-01-01
  • 2011-11-24
  • 2013-09-21
  • 1970-01-01
相关资源
最近更新 更多