繁体   English   中英

调试MySQL查询结果。 使用计数功能,内部联接和子查询

[英]Debugging MySQL query result. Uses count function, inner join and a sub-query

这是我的查询。 除了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与人类可读名称匹配的表。 因此,以下查询产生了我想要的计数,但是,我希望将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) 

有任何想法我做错了吗?

为什么要混合显式联接和隐式联接? 您似乎错过了第一个表上的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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM