这是您的查询:
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。巧合的是,在您的本地服务器上,它确实有。
你status也有问题,所以逻辑也应该不稳定。
你想要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;