我需要一个查询帮助,在我的数据库中,我有3个唯一的列,但有时我们会放一些“字符”来创建新行。现在,我需要确定这些情况,但是有很多行(接近50000),那么我需要知道其中哪一个是“重复的”(不是真正重复的,但是唯一字段是相似的)。假设您有两个用户的电子邮件“相同”,例如
email@enterprise.com
email +您的名字@ enterprise.com
我需要了解这些情况,但需要了解其他列,例如ID或用户名...
我尝试了子查询,但是在like子句中,我只能使用一行。
我想像...
select * from mytable where column like ('%'||select column from my table||'%);
我应该使用“重复操作”数据获取所有行,以便可以混合所有人。
谢谢! :D
答案 0 :(得分:1)
我认为您可以将postgresql similarity function与连接到同一张表一起使用,希望该示例对您有所帮助:
select u1.id, u2.id, u1.email, u2.email from mytable as u1
join mytable as u2
on similarity(u1.email, u2.email) >= 0.3 /* approach more than 1 for more similarity */
and u1.id <> u2.id /* different primary key */
order by u1.id, u1.email, u2.email