gpt4 book ai didi

MySQL Left Join 与 SUM 和Where 子句返回 Null

转载 作者:行者123 更新时间:2023-11-29 13:11:03 34 4
gpt4 key购买 nike

我有一个查询遇到问题,

SELECT id, name, cc, total FROM goods gd 
LEFT JOIN (SELECT count(*) as cc, status, pid, SUM(number) as total FROM prices)pr
ON pr.pid = gd.id AND pr.status = 0 WHERE gd.id=20

当我在本地服务器上运行此查询时,如果提取正确,但在我的远程服务器上,抄送和总计返回 null。

请问您知道原因吗?注意:如果我删除了 count(*) 和 SUM(number) 它会返回多行,我希望 Left join 获得第二个表中的总匹配数和数字总和。

最佳答案

这是您的查询:

SELECT id, name, cc, total
FROM goods gd LEFT JOIN
(SELECT count(*) as cc, status, pid, SUM(number) as total
FROM prices
) pr
ON pr.pid = gd.id AND pr.status = 0
WHERE gd.id=20;

子查询使用 MySQL (mis) 功能,该功能允许您在 select 中包含不在 group by 中的列,例如 pid 并且不在聚合列中。 MySQL documentation非常明确的是,此类列的值来自任意匹配的记录,并且仅当该列的所有值在组中都相同时才应使用此功能。

发生的情况是,您服务器上的任意列的值为 20。巧合的是,在您的本地服务器上,它的值为 20。

您的状态也有问题,因此逻辑也应该不稳定。

您想要 status = 0 的总和,像这样吗?

SELECT gd.id, gd.name, pr.cc, pr.total
FROM goods gd LEFT JOIN
(SELECT count(*) as cc, status, pid, SUM(number) as total
FROM prices
WHERE status = 0
GROUP BY pid
) pr
ON pr.pid = gd.id
WHERE gd.id = 20;

或者,您是否只想匹配 status 始终等于 0 的记录?

SELECT gd.id, gd.name, pr.cc, pr.total
FROM goods gd LEFT JOIN
(SELECT count(*) as cc, status, pid, SUM(number) as total
FROM prices
GROUP BY pid
HAVING min(status) = 0 and max(status) = 0
) pr
ON pr.pid = gd.id
WHERE gd.id = 20;

关于MySQL Left Join 与 SUM 和Where 子句返回 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22094244/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com