mysql - 从数据库表中删除重复记录

标签 mysql duplicates

我正在使用

mysql Ver 14.14 Distrib 5.5.35, for debian-linux-gnu (x86_64) using readline 6.2

我的mysql数据库表中有一个情况,其中有重复的记录,奇怪的是这些记录之间有一个额外的空格itemCode

例如,

mysql> select * from tbl_item;
+--------+-----------------+---------------------------+
| itemId | itemCOde        | itemdescription           |
+--------+-----------------+---------------------------+
|      1 | 0001 1234567    | Test description data     |
|      2 | 0001  1234567   | Test description data     |
|      3 | 0120 21113      | dummy data                |
|      4 | 0120  21113     | dummy data                |
|      5 | 145 78953       | hello world               |
|      6 | 487 77787       | testing data              |
+--------+-----------------+---------------------------+

通过运行以下查询,我能够找到所有重复记录:

mysql> select itemId, itemCode, itemDescription, count(*) as count from tbl_item Group By itemDescription having count(*) > 1;
+--------+-----------------+---------------------------+-------+
| itemId | itemCode        | itemdescription           | count |
+--------+-----------------+---------------------------+-------+
|      1 | 0001 1234567    | Test description data     |   2   |
|      3 | 0120 21113      | dummy data                |   2   |
+--------+-----------------+---------------------------+-------+

但是现在,我该如何删除 itemCode 之间有多余空格的记录。有什么建议吗?

mysql> desc tbl_item;
+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| itemID          | int(11)      | NO   | PRI | NULL    | auto_increment |
| itemCode        | varchar(50)  | NO   |     | NULL    |                |
| itemDescription | varchar(200) | NO   |     | NULL    |                |
+-----------------+--------------+------+-----+---------+----------------+

最佳答案

通过此查询,您应该找到这些项目,其中有另一个具有相同描述和更短 itemCode 的条目。

     SELECT tbl_item.* 
     FROM tbl_item
     INNER JOIN tbl_item AS t2
      ON t2.itemDescription = tbl_item.itemDescription
      AND LENGTH(t2.itemCode) < LENGTH(tbl_item.itemCode)

通过此功能,您可以找到所有条目,其中没有其他条目具有相同的描述和更短的 itemCode。好的条目。您可以将此结果插入表副本中,然后重命名。

     SELECT tbl_item.* 
     FROM tbl_item
     LEFT JOIN tbl_item AS t2
      ON t2.itemDescription = tbl_item.itemDescription
      AND LENGTH(t2.itemCode) < LENGTH(tbl_item.itemCode)
     WHERE t2.itemId IS NULL

关于mysql - 从数据库表中删除重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24341808/

相关文章:

r - 如何在R中找到不同大小的列之间的共同元素?

mysql - 一个字段与 JOINED 行数的 SUM 计数

mysql - 当还需要年份字段时,强制执行日期时间和 ID 唯一键

php - 更改 MySql 中的变量

mysql - 确保表只包含某些字段的唯一值

python - 在 Python 中从非常大的文本文件中删除重复项的更快方法?

c# - 需要在 SortedCollection 中允许重复(C#,2.0)

mongodb - 如何从数组中删除重复的条目?

MySQL - 计算一周中每一天但每个发件人的所有行数

mysql - 生成随机时间