【发布时间】:2019-12-23 21:23:11
【问题描述】:
我有一个用户表,其中包含以下字段
id, first_name, last_name, street_address, city, state, zip-code, firm, user_identifier, created_at, update_at。
这张表有很多重复。
我想通过first_name, last_name and street_address 模糊匹配它们。
这是我所做的
我创建了一个包含以下字段的新表
CREATE TABLE dupes(
id bigint NOT NULL,
first_name TEXT,
last_name TEXT,
street_address CHAR(50),
searched_name TEXT,
searched_user_id bigint
);
接下来我有这个函数,它应该遍历字段并插入到相似度高于 ```.75
的新表 (dupes)
DO
$$
DECLARE
rec record;
full_name varchar;
BEGIN
FOR rec IN
SELECT id, first_name ||' '||last_name ||' '||street_address full_name
FROM users
LOOP
INSERT INTO dupes(id,first_name,last_name, street_address,searched_name, searched_user_id)
SELECT id,first_name,last_name, street_address,rec.full_name,rec.id
FROM users
WHERE similarity(first_name ||' '||last_name||' '||street_address, rec.full_name) > .75
and id<>rec.id;
END LOOP;
END
$$;
不幸的是,每行返回的副本都越来越多。
我对此很陌生。有人可以帮忙吗?
谢谢
【问题讨论】:
标签: sql postgresql similarity