突然收到客户的邮件,说文件无法下载,我也收到了报错邮件,报错内容为:
显而易见,是因为返回值为一个对象 却查询到了多个结果
查询了一下对应的表数据,果然如此,并且不止一条数据有这样的情况,用sql查询出了多个重复数据,具体sql如下:
SELECT * FROM 表名 WHERE 字段名 IN ( SELECT 字段名 FROM 表名 GROUP BY 字段名 HAVING Count()> 1 ) AND 字段名 IN ( SELECT 字段名 FROM 表名 GROUP BY 字段名 HAVING count()> 1) ORDER BY 字段名
因为之前同事做过文件迁移,重复生成了表中的数据 导致现在查询也有部分数据重复出现,所以现在不能只管一条数据,必须要把所有重复的数据全部清除,不然还会出现这个情况
向同事确定了一下,多于数据可以删除,不影响系统,就开始操作了
先查询出 已有的数据一条以外的多余数据
SELECT * FROM 表名 WHERE id NOT IN ( SELECT t.tId FROM ( SELECT MIN(id) AS tId FROM 表名 GROUP BY 字段名 ) t ) ORDER BY 字段名
这里的MIN(id)是指用函数查询出重复的数据中id最小的数据,也可以用MAX(id)
同样都可以查出对应的数据,如果有别的条件,可以根据对应的数据添加查询条件
查询出多余的数据之后就可以进行删除操作了,只是我这里是删除状态所以是update,对应的sql如下:
update 表名 from DELETE_MARK set = "Y" WHERE id NOT IN ( SELECT t.tId FROM ( SELECT MIN(id) AS tId FROM 表名 GROUP BY 字段名 ) t ) ORDER BY 字段名
然后,这个问题就解决啦!
切记切记,做数据修改之前要记得备份数据!!