调试MySQL查询结果。使用count函数,内连接和子查询

时间:2014-07-03 02:29:06

标签: mysql

这是我的查询。输出看起来很好,除了COUNT函数返回看似完全随意的数字(例如7位数字,我期望3位数字):

SELECT tc.tableName, m.fieldName, COUNT(m.fieldName) 
FROM apiResult, (
    SELECT cc.surveyID, cc.fieldName
    FROM apiResult as ar 
    INNER JOIN columnConversion as cc 
    ON substring(ar.triggerName,-10)=cc.fieldID 
    ) AS m 
INNER JOIN tableConversion as tc 
ON m.surveyID=tc.surveyID 
GROUP BY tc.tableName, m.fieldName;

我认为,首先,COUNT(m.fieldName)可能是错误的,因为它与GROUP BY tc.tableName, m.fieldName不符。

以下是查询要执行的操作:子查询中的一个表apiResult有一个名为“triggerName”的列,其中包含一个名为“fieldID”的ID,以及一个名为“surveyID”的列。表columnConversion和tableConversion是将ID与人类可读名称匹配的表。因此,follow查询会生成我想要的计数,但是,我希望ID由人类可读的名称替换,因此上面的查询:

SELECT cc.surveyID, cc.fieldName, COUNT(ar.triggerName)
FROM apiResult as ar
INNER JOIN columnConversion as cc 
ON substring(ar.triggerName,-10)=cc.fieldID
GROUP BY (ar.triggerName) 

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:1)

为什么要混合使用显式和隐式连接?您似乎在第一个表上错过了join条件。嗯,实际上,我认为不需要它。这应该有效:

SELECT tc.tableName, m.fieldName, COUNT(m.fieldName) 
FROM (SELECT cc.surveyID, cc.fieldName
      FROM apiResult ar INNER JOIN
           columnConversion cc 
           ON substring(ar.triggerName, -10) = cc.fieldID 
     ) m INNER JOIN
     tableConversion as tc 
     ON m.surveyID = tc.surveyID 
GROUP BY tc.tableName, m.fieldName;