最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

[已解决]去除MySQL中某个表中某几列重复的数据

MySQL crifan 1798浏览 0评论
MariaDB [guanzhi_removeDuplicate]> SHOW COLUMNS from selection;
+————+————-+——+—–+———+—————-+
| Field      | Type        | Null | Key | Default | Extra          |
+————+————-+——+—–+———+—————-+
| id         | int(10)     | NO   | PRI | NULL    | auto_increment |
| staff_id   | int(10)     | NO   |     | NULL    |                |
| car_sn     | varchar(10) | NO   |     | NULL    |                |
| bid_price  | int(10)     | NO   |     | NULL    |                |
| created_at | int(10)     | NO   |     | NULL    |                |
| sequence   | int(10)     | NO   |     | NULL    |                |
+————+————-+——+—–+———+—————-+
6 rows in set (0.00 sec)
MariaDB [guanzhi_removeDuplicate]> SELECT * from selection;
。。。
| 2901 |      302 | 07     |     77000 | 1453346912 |        7 |
| 2902 |      302 | 08     |     77000 | 1453346912 |        8 |
。。。
| 2940 |      302 | 40     |     78102 | 1453346943 |       40 |

附上此处部分的,比较完整的数据:

| 2529 |       82 | 11     |     84816 | 1453276140 |       11 |
| 2530 |       82 | 12     |     84816 | 1453276140 |       12 |
| 2531 |       82 | 23     |     84002 | 1453276140 |       23 |
| 2532 |       82 | 26     |     91600 | 1453276140 |       26 |
| 2533 |       82 | 27     |     91600 | 1453276141 |       27 |
。。。
| 2758 |       27 | 82     |     74009 | 1453343891 |       82 |
| 2759 |       27 | 83     |     69999 | 1453343891 |       83 |
。。。
| 2912 |      302 | 08     |     77000 | 1453346933 |        8 |
| 2913 |      302 | 23     |     78102 | 1453346933 |       23 |
。。。
| 3068 |      269 | 74     |     51021 | 1453353548 |       74 |
| 3069 |      269 | 77     |     41280 | 1453353548 |       77 |
+——+———-+——–+———–+————+———-+
3067 rows in set (0.01 sec)
MariaDB [guanzhi_removeDuplicate]> SELECT * from selection;

很明显,对于同样的数据:

| 2901 |      302 | 07     |     77000 | 1453346912 |        7 |
| 2902 |      302 | 08     |     77000 | 1453346912 |        8 |
| 2903 |      302 | 23     |     78102 | 1453346912 |       23 |
| 2904 |      302 | 24     |     78102 | 1453346912 |       24 |
| 2905 |      302 | 26     |     84102 | 1453346912 |       26 |
| 2906 |      302 | 29     |     84100 | 1453346912 |       29 |
| 2907 |      302 | 30     |     84100 | 1453346912 |       30 |
| 2908 |      302 | 31     |     84100 | 1453346912 |       31 |
| 2909 |      302 | 32     |     84100 | 1453346912 |       32 |
| 2910 |      302 | 40     |     78102 | 1453346912 |       40 |

重复了好几次。

此处需要找出来,对于:

同一个人staff_id,此处的302,

不同的车car_sn,此处的07,08,23,24等等

不同的报价,此处的77000,78102,84102

只允许报一次

-》把多余的,其他部分的:

| 2901 |      302 | 07     |     77000 | 1453346912 |        7 |
| 2902 |      302 | 08     |     77000 | 1453346912 |        8 |
| 2903 |      302 | 23     |     78102 | 1453346912 |       23 |
| 2904 |      302 | 24     |     78102 | 1453346912 |       24 |
| 2905 |      302 | 26     |     84102 | 1453346912 |       26 |
| 2906 |      302 | 29     |     84100 | 1453346912 |       29 |
| 2907 |      302 | 30     |     84100 | 1453346912 |       30 |
| 2908 |      302 | 31     |     84100 | 1453346912 |       31 |
| 2909 |      302 | 32     |     84100 | 1453346912 |       32 |
| 2910 |      302 | 40     |     78102 | 1453346912 |       40 |

都删除掉。

搜:

mysql remove duplicate

mysql remove duplicate record

mysql remove duplicate values

sql – Remove duplicate rows in MySQL – Stack Overflow

sql – Delete all Duplicate Rows except for One in MySQL? – Stack Overflow

How to delete duplicates on a MySQL table? – Stack Overflow

MariaDB [guanzhi_removeDuplicate]> ALTER IGNORE TABLE selection ADD UNIQUE (staff_id, car_sn, bid_price);
Query OK, 3067 rows affected (3.22 sec)                
Records: 3067  Duplicates: 794  Warnings: 0
MariaDB [guanzhi_removeDuplicate]>

 去看看剩余的数据,果然清除了重复的了:

| 2901 |      302 | 07     |     77000 | 1453346912 |        7 |
| 2902 |      302 | 08     |     77000 | 1453346912 |        8 |
| 2903 |      302 | 23     |     78102 | 1453346912 |       23 |
| 2904 |      302 | 24     |     78102 | 1453346912 |       24 |
| 2905 |      302 | 26     |     84102 | 1453346912 |       26 |
| 2906 |      302 | 29     |     84100 | 1453346912 |       29 |
| 2907 |      302 | 30     |     84100 | 1453346912 |       30 |
| 2908 |      302 | 31     |     84100 | 1453346912 |       31 |
| 2909 |      302 | 32     |     84100 | 1453346912 |       32 |
| 2910 |      302 | 40     |     78102 | 1453346912 |       40 |
| 2971 |      108 | 33     |     81399 | 1453347864 |       33 |
| 2972 |      108 | 36     |     74678 | 1453347864 |       36 |
| 2973 |      108 | 37     |     73003 | 1453347864 |       37 |

附上此处,去重后的,比较完整的数据:

| 2115 |      164 | 71     |     73699 | 1453274439 |       71 |
| 2116 |      164 | 72     |     68299 | 1453274439 |       72 |
。。。
| 3067 |      269 | 64     |     35321 | 1453353548 |       64 |
| 3068 |      269 | 74     |     51021 | 1453353548 |       74 |
| 3069 |      269 | 77     |     41280 | 1453353548 |       77 |
+——+———-+——–+———–+————+———-+
2273 rows in set (0.01 sec)
MariaDB [guanzhi_removeDuplicate]>

然后再去看表的结构,好像看不出来,那三个key是unique的:

MariaDB [guanzhi_removeDuplicate]> SHOW COLUMNS from selection;
+————+————-+——+—–+———+—————-+
| Field      | Type        | Null | Key | Default | Extra          |
+————+————-+——+—–+———+—————-+
| id         | int(10)     | NO   | PRI | NULL    | auto_increment |
| staff_id   | int(10)     | NO   | MUL | NULL    |                |
| car_sn     | varchar(10) | NO   |     | NULL    |                |
| bid_price  | int(10)     | NO   |     | NULL    |                |
| created_at | int(10)     | NO   |     | NULL    |                |
| sequence   | int(10)     | NO   |     | NULL    |                |
+————+————-+——+—–+———+—————-+
6 rows in set (0.01 sec)
MariaDB [guanzhi_removeDuplicate]>

现在想要确定的知道和查询到,到底这三个key,是不是的确已经是加了Unique属性了。

所以问题转化为:

[已解决]如何确定MySQL的表中哪些key是unique的

[总结]

此处通过:

mysql -u root -p
输入密码:xxx
选择数据库:use guanzhi_removeDuplicate
去除重复项:ALTER IGNORE TABLE selection ADD UNIQUE (staff_id, car_sn, bid_price);

即可去重。

转载请注明:在路上 » [已解决]去除MySQL中某个表中某几列重复的数据

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
83 queries in 0.198 seconds, using 22.14MB memory