我有一个不寻常的查询,这让我现在卡住了
表格字段为:
id bigint 20
name varchar 255
desc text
有许多记录具有相同的名称和desc,但是desc在单词之间有一些额外的空格
喜欢
1 't1' 'hello world'
2 't2' 'hello world'
我需要找到那些具有类似数据的行
我怎样才能找到这些,谢谢。
答案 0 :(得分:2)
这非常接近。假设:
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| d | text | YES | | NULL | |
| id | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
然后这个查询:
select x.id,x2.id,x.d,x2.d from x left join x as x2 on replace(x.d," ","") = replace(x2.d," ","") and x.id != x2.id having !(x2.id is null);
获取重复的行。如果你有“Helloworld”(即没有空格)并且你不希望它匹配,它就会失败。
答案 1 :(得分:0)
除非您需要保留原始数据,否则最好在插入时,在比较时创建/更新记录时而不是稍后更新。
话虽如此,你可以做点什么
SELECT id, name, desc, REPLACE(desc, ' ', ' ') as replaced
xx x <--note the number of spaces
FROM table
GROUP replaced
HAVING replaced > 1
可能不会很完美,你必须多次调整更换部分,但这应该让你开始。