首页 > 解决方案 > 我可以在子查询中使用“LIKE”吗

问题描述

我需要一些查询帮助,在我的数据库中我有 3 个唯一的列,但有时我们会放置一些“字符”来创建一个新行。现在,我需要识别这些案例,但是有很多行(接近 50000),然后我需要知道其中哪一个是“重复的”(不是真正重复,但唯一字段是相似的)。想象一下,您有两个拥有“相同”电子邮件的用户,例如

email@enterprise.com
email+yourname@enterprise.com

我需要知道这些情况,但还有其他列,如 ID 或用户名......

我尝试过使用子查询,但在like 子句中我只能使用一行。

我想像...

select * from mytable where column like ('%'||select column from my table||'%);

我应该得到所有带有“重复操作”数据的行,所以我可以混合每个人。

谢谢!:D

标签: sqlpostgresql

解决方案


我想你可以使用 postgresql相似函数,加入同一个表,我希望这个例子有帮助:

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

推荐阅读