這裏是你的查詢:
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
列,如pid
不在的group by
並不在彙總列中。 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;
謝謝@ Gordon-Linoff的綜合答案,會選擇你的答案,但echo_Me的答案首先出現。再次感謝。 – andychukse
@andychukse。 。 。作者有權選擇他們認爲最好的答案。你的問題是:「請問原因?」,這不是「我該如何解決這個問題」。另外,echo_me的回答並不處理'status'的問題,你會發現這是一個揮之不去的問題。 –
我剛剛注意到你指出的狀態問題,我會更新你的答案。太感謝了 – andychukse