2015-10-13 89 views
1

你好,我尋求幫助,看看我的查詢有什麼問題,它沒有返回來自table consulta的行數(number),其中userIDC等於表用戶的userID。以及來自表asesoria的userIDC的相同操作。Mysql SUM查詢沒有返回預期結果

SELECT c.*, SUM(IF(a.userIDA = c.userID , 1, 0)) AS count_asesoria, SUM(IF(s.userIDC = c.userID , 1, 0)) AS count_consulta 
    FROM users as c 
    LEFT JOIN consulta AS s ON s.userIDC = c.userID 
    LEFT JOIN asesoria AS a ON a.userIDA = c.userID 
    GROUP BY c.userID DESC 

rigt現在returs兩個count_asesoriacount_consulta

表用戶相同的結果:

userID | Data | 
------------------ 
3  | content | 

表CONSULTA

userIDC | Data | 
------------------ 
3  | content | 
3  | content | 

所以count_consulta不得不返回2

+1

您能否顯示一些示例數據以及您對查詢的期望結果? – dave

回答

0

您的問題最可能的原因是連接中的表格之間的笛卡爾積。正確的解決方案是在查詢之前預先聚合結果。或者,使用相關的子查詢。這可能是在這種情況下,最簡單的方法,並可能具有最佳的性能:

SELECT u.*, 
     (SELECT COUNT(*) 
     FROM consulta c 
     WHERE c.userIDC = u.userId 
     ) as count_consulta, 
     (SELECT COUNT(*) 
     FROM asesoria a 
     WHERE a.userIDA = u.userId 
     ) as count_asesoria 
FROM users u; 

爲了獲得最佳性能,你想在consulta(userIDA)asesoria(userIDA)指標。