数据库MySQL如何查找删除重复行数据库

来源:互联网 / 作者:SKY / 2018-04-27 18:21 / 点击:
当你对b字段排序(分组),相同值的c被分到不同的组,因此不能用COUNT(DISTINCT c)来计算大

MySQL | 查找删除重复行

当你对b字段排序(分组),相同值的c被分到不同的组,因此不能用COUNT(DISTINCT c)来计算大小。COUNT()之类的内部函数只作用于同一个分组,对于不同分组的行就无能为力了。类似,如果排序的是c字段,相同值的b也会分到不同的组,无论如何是不能达到我们的目的的。

几种正确的方法

也许最简单的方法是分别对某个字段查找重复行,然后用UNION拼在一起,像这样:

select b as value, count(*) as cnt, 'b' as what_col    

from a_b_c group by b having count(*) > 1    

union    

select c as value, count(*) as cnt, 'c' as what_col   

from a_b_c group by c having count(*) > 1;    

+-------+-----+----------+    

| value | cnt | what_col |    

+-------+-----+----------+   

|     1 |   3 | b        |    

|     2 |   3 | b        |   

|     3 |   3 | b        |   

|     1 |   3 | c        |    

|     2 |   3 | c        |   

|     3 |   3 | c        |   

+-------+-----+----------+ 

输出what_col字段为了提示重复的是哪个字段。另一个办法是使用嵌套查询:

select a, b, c from a_b_c    

where b in (select b from a_b_c group by b having count(*) > 1)    

   or c in (select c from a_b_c group by c having count(*) > 1);   

+----+------+------+    

| a  | b    | c    |   

+----+------+------+   

|  7 |    1 |    1 |    

|  8 |    1 |    2 |   

|  9 |    1 |    3 |    

| 10 |    2 |    1 |    

| 11 |    2 |    2 |    

| 12 |    2 |    3 |    

| 13 |    3 |    1 |   

| 14 |    3 |    2 |   

| 15 |    3 |    3 |   

+----+------+------+ 

阅读延展

1
3