name id
cgk 15
cgs 14
asasd 10
cgs 9
cgk 8
cgs 11
cgs 16
cgs 17
我想把所有重复的id都查询出来,只保留最小的那个id,我用
select id from test group by name having count(*)>1
很多重复的id都显示不出来,只会把 15,14的id的查询出来,其他的都查询不出来,请指教
cgk 15
cgs 14
asasd 10
cgs 9
cgk 8
cgs 11
cgs 16
cgs 17
我想把所有重复的id都查询出来,只保留最小的那个id,我用
select id from test group by name having count(*)>1
很多重复的id都显示不出来,只会把 15,14的id的查询出来,其他的都查询不出来,请指教
cgk 15
cgs 14
asasd 10
cgs 9
cgk 8
cgs 11
cgs 16
cgs 17
基于这个测试用例,你期望的结果是什么?写出例子来,不要只用文字说明。
"我想把所有重复的id都查询出来,只保留最小的那个id," 这句话很难理解正确的,猜错了反而未必是你要的东西。
+-------+----+
| name | id |
+-------+----+
| asasd | 10 |
| cgk | 8 |
| cgk | 15 |
| cgs | 9 |
| cgs | 11 |
| cgs | 14 |
| cgs | 16 |
| cgs | 17 |
+-------+----+看不懂你是如何选的,能解释一下吗?
| cgk | 15 | 选中8可以说选出一个小的,或者留下最大的。
| cgs | 9 |
| cgs | 11 |
| cgs | 14 |
| cgs | 16 |
| cgs | 17 | 这个为什么选中 9,11,16,17 ? 根据什么原则? 我猜了半天还没猜出来。 猜错了是浪费双方时间,估计你又得无满意结贴。
| name | id |
+-------+----+
| asasd | 10 |
| cgk | 8 |
| cgk | 15 |
| cgs | 9 |
| cgs | 11 |
| cgs | 14 |
| cgs | 16 |
| cgs | 17 |
+-------+----+ id这个字段是主键,自动递增的,但是name中有很多重复的记录,我想把多余重复的去掉,剩下的name都是唯一的,保留最小的id。
查询的结果应该是。
+-------+----+
| name | id |
+-------+----+
| asasd | 10 |
| cgk | 8 |
| cgs | 9 |
+-------+----+
mysql> select * from t_cgk100;
+-------+----+
| name | id |
+-------+----+
| cgk | 8 |
| cgs | 9 |
| asasd | 10 |
| cgs | 11 |
| cgs | 14 |
| cgk | 15 |
| cgs | 16 |
| cgs | 17 |
+-------+----+
8 rows in set (0.00 sec)mysql> select name,min(id) from t_cgk100 group by name;
+-------+---------+
| name | min(id) |
+-------+---------+
| asasd | 10 |
| cgk | 8 |
| cgs | 9 |
+-------+---------+
3 rows in set (0.00 sec)或者 (估计你是想要这个,你的表中估计还有其它字段,全靠猜的)mysql> select * from t_cgk100 a
-> where not exists (select 1 from t_cgk100 where name=a.name and id<a.id);
+-------+----+
| name | id |
+-------+----+
| cgk | 8 |
| cgs | 9 |
| asasd | 10 |
+-------+----+
3 rows in set (0.00 sec)
你的第二个快还是我这样写的速度快呢