MYSQL Query使值成为重复值并从表中删除重复项

时间:2012-03-19 09:24:26

标签: mysql sql

我有一个包含692256行数的表,其数据类似于下面的

customer_type_id     data             

1                    G.M (1) 
1                    GM (1)
1                    FORD (K.G)
1                    FORD(K.G)
1                    Honda

2                    GM (1)
2                    OTHER
2                    OTHER2

在上述情况下,我必须根据 customer_type_id 数据列删除重复项。 并且重复项不完全重复。例如,前两个记录是重复的,接下来的两个记录也是重复的。数据中可能存在一些空格或句点或大括号。因此,要获得重复项,我必须在数据

上运行以下函数
trim( replace(replace(replace(replace(replace(data,'.',''),'(',''),')',''),' ','') ,' ','')  )

现在我想从上面的案例中删除其中一行,并保留另一行的格式。

在上面的例子中我想要

customer_type_id     Data             

    1                    G.M (1) 
    1                    FORD(K.G)
    1                    Honda

    2                    GM (1)
    2                    OTHER
    2                    OTHER2

事实上,重复值的任何记录都可以。但不应该像下面那样(在下面的情况下数据列值空格和大括号从现有值中删除)

 customer_type_id     Data             

    1                    GM1 
    1                    FORDKG
    1                    Honda

    2                    GM (1)
    2                    OTHER
    2                    OTHER2

对此有何帮助?

非常感谢

此致

基兰

2 个答案:

答案 0 :(得分:1)

添加自动增量键“ID”

delete 
from table
where table.ID NOT IN (
            select MAX(ID)
            from table
            group by customer_id, your_function(data) )

我想它应该可行,请检查/确认语法,我不确定。想法是删除除一个不同组合之外的所有记录。

答案 1 :(得分:0)

也许您可以在查询中使用LIKE。

SELECT * FROM table WHERE data LIKE "%G%M%1%" 

%表示任何东西(没有,空格,角色等)。

我不确定这是否可靠,因为上面也会匹配“Grand Master 7331”,但是如果你确定那些碰撞不会发生它可能会有效。