簡體   English   中英

MySQL左連接,帶SUM和Where子句返回Null

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM