mysql的Distinct关键字遇到的问题

使用distinct

在使用distinct去重的时候,单列是挺好用的,但是多列的时候,就会有一点问题。

首先我想要做的效果是简单的数据去重,但是想要针对一个列来去重,其他列不需要去重,一开始是这样写的:

select distinct sample_id,id,name from mutation_information;

可以查,但是他是针对多列来去重的,意思就是说,并不只针对sample_id来去重,而是针对sample_id,id,name这三个字段来去重。这不是我想要的效果。


使用group by

然后在sql上解决是有办法的,就是通过group by语句来做。

group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面。

一开始是这样写的,但是会列出所有的结果,问题出在sample_id这个列。

select * from mutation_information where sample_id in (SELECT sample_id FROM mutation_information GROUP BY sample_id);

应该这样写,id是主键。

select * from mutation_information where id in (SELECT min(id) FROM mutation_information GROUP BY sample_id);

这样也是可以实现效果的。


在业务层代码自己处理

这种方法就是通过复写equal和hashCode方法来实现去重,这样也是可以实现效果的。