MYSQL查询以使值重复并从表中删除重复项
我有一个表,行数为692256,其数据如下所示MYSQL查询以使值重复并从表中删除重复项,mysql,sql,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
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
在上述情况下,我必须根据客户类型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
事实上,任何重复值的记录都可以。但不应如下所示(在以下情况下,数据列值空格和大括号将从现有值中删除)
有什么帮助吗
非常感谢
问候
Kiran也许您可以在查询中使用LIKE
SELECT * FROM table WHERE data LIKE "%G%M%1%"
其中%表示几乎任何东西(无、空格、字符等)
虽然我不确定这是否可靠,因为上面的内容也会与“大师7331”相匹配,但如果你确定这些碰撞不会发生,它可能会起作用 也许您可以在查询中使用LIKE
SELECT * FROM table WHERE data LIKE "%G%M%1%"
其中%表示几乎任何东西(无、空格、字符等)
虽然我不确定这是否可靠,因为上面的内容也会与“大师7331”相匹配,但如果你确定这些碰撞不会发生,它可能会起作用 添加自动递增键“ID”
我想应该可以,请检查/确认语法,我不确定。想法是删除除一个不同组合之外的所有记录。添加一个自动递增键“ID”
我想应该可以,请检查/确认语法,我不确定。想法是删除除一个不同组合之外的所有记录。
选择distinct(id),新闻中的艺术家
一个示例谢谢您的回复,在这里我不能使用distinct。。因为如果在格式化数据上使用distinct,则实际记录值并不完全重复。。请检查我上面给出的例子。。我必须删除一些字符以使其重复Shi Zohaib,感谢您的回复。很抱歉没有,但如果我们需要,我可以添加另一列作为主键,并将其设置为自动递增选择DISTINCT(id),新闻中的艺术家一个示例谢谢您的回复,在这里我不能使用DISTINCT。。因为如果在格式化数据上使用distinct,则实际记录值并不完全重复。。请检查我上面给出的例子。。我必须删除一些字符以使其重复Shi Zohaib,感谢您的回复。很抱歉,没有,但如果我们需要,我可以添加另一列作为主键,并使其成为自动递增。很抱歉,这没有帮助。。谢谢你的回答我很抱歉这没用。。谢谢你的回复,谢谢你的快速解决方案。我正在运行它。花时间。。。子查询相当快。。但是不在需要时间。再次感谢,我为上面的子查询创建了一个临时表,在上面创建了索引,并使用了“不存在”。查询运行得非常快,删除了不需要的记录。感谢这个奇妙的快速解决方案。我正在运行它。花时间。。。子查询相当快。。但是不在需要时间。再次感谢,我为上面的子查询创建了一个临时表,在上面创建了索引,并使用了“不存在”。查询运行得非常快,删除了不需要的记录。
delete
from table
where table.ID NOT IN (
select MAX(ID)
from table
group by customer_id, your_function(data) )