[英]MySQL Left Join with SUM and Where clause returning Null
我有一個疑問,
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
當我在本地服務器上運行此查詢時(如果可以正確提取),但在我的遠程服務器上,cc和total返回null。
請對原因有任何想法嗎? 注意:如果刪除了count(*)和SUM(number),它將返回多行,我希望Left連接可以使我獲得第二個表中的總匹配數和總和。
這是您的查詢:
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 文檔非常明確地指出此類列的值來自任意匹配的記錄,並且僅當該列的所有值在組中相同時才應使用此功能。
發生的情況是服務器上的任意列的值都不為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;
您必須在加入的查詢中group by pid
添加group by pid
。
SELECT id, name, cc, total FROM goods gd
LEFT JOIN (SELECT count(*) as cc, status, pid, SUM(number) as total
FROM prices group by pid)pr
ON pr.pid = gd.id AND pr.status = 0
WHERE gd.id=20
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.