我正在使用
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 | |
+-----------------+--------------+------+-----+---------+----------------+
答案 0 :(得分:1)
使用此查询,您应该找到具有相同描述和更短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