C#执行MySQL SELECT查询结果与MySQL Workbench返回不一致求助
MySQL查询结果不一致问题原因
- 查询逻辑与取值目标不匹配
你当前执行的SELECT * FROM ... GROUP BY Date语句的返回结果是按Date字段分组后的多行原始记录,MySQL Workbench返回3条是指符合条件的记录共对应3个不同的Date值。你在C#中调用test.GetInt32(0)是读取结果集第一行的第一个字段值,得到的16050大概率是第一行记录的主键ID值,并非符合条件的记录数量。
如果你的需求是获取分组后的行数,建议将SQL改写为聚合统计版本:
SELECT COUNT(DISTINCT Date) AS record_count FROM myTable.requests WHERE myAccount= @account AND MONTH(requests.Date) = MONTH(NOW()) AND YEAR(requests.Date) = YEAR(NOW()) AND requests.State = @state
如果需要统计总记录数,去掉DISTINCT关键字即可。
- 数据读取逻辑错误
你当前仅调用了一次test.Read(),只能读取到结果集的第一行数据。如果需要遍历所有分组行手动统计数量,需要循环调用test.Read()累加计数,示例如下:
int groupCount = 0; while(test.Read()) { groupCount++; }
该方式性能远低于直接在SQL层用聚合函数统计,优先推荐改写SQL的方案。
参数值不一致风险
你在Workbench中测试时硬编码了myAccount= 'test',C#代码中传入的参数值是user.name,需确认user.name的值是否与测试用的test完全一致,避免参数不同导致筛选的结果集范围不一致。GROUP BY用法不规范隐患
SELECT * + GROUP BY的写法不符合SQL标准,依赖MySQL非标准配置ONLY_FULL_GROUP_BY关闭才能运行,若后续数据库配置变更会直接抛出语法错误,建议根据实际需求明确指定查询字段,非分组字段需用合理的聚合函数包裹。
内容的提问来源于stack exchange,提问作者Fred.G
相关产品推荐
相关产品推荐

