我正在利用PostgreSQL中的metaphone函数来查找可能拼写错误的重复记录。
SELECT metaphone(first_name, 4), metaphone(last_name, 4)
FROM people GROUP BY metaphone(last_name, 4),
metaphone(first_name, 4) HAVING COUNT(*) > 1;这对于向我展示我们的数据库中至少有100个潜在的副本是很好的,但是我不能对此做太多的工作,因为我无法从查询结果中获得任何唯一的标识信息。我试过这个:
SELECT person_id, first_name, last_name
FROM people
WHERE metaphone(first_name, 16) IN (
SELECT metaphone(first_name, 16)
FROM people GROUP BY metaphone(last_name, 16),
metaphone(first_name, 16) HAVING COUNT(*) > 1
)
AND metaphone(last_name, 16) IN (
SELECT metaphone(last_name, 16)
FROM people GROUP BY metaphone(last_name, 16),
metaphone(first_name, 16) HAVING COUNT(*) > 1
)
ORDER BY last_name, first_name;哪些类型的工作,但仍然包含一些记录实际上没有匹配的两个字段。例如,我可以有两个‘约翰史密斯’,2个‘简史密斯’和2个‘无名氏’。我可能只有一个“简·多伊”,但她会出现在第二个查询的结果中。
是否有更准确地获取用于编译第一个查询结果的行的方法?
发布于 2015-09-09 20:43:17
您需要同时进行两种比较:
SELECT person_id, first_name, last_name
FROM people
WHERE (metaphone(first_name, 16), metaphone(last_name, 16)
) IN (SELECT metaphone(first_name, 16), metaphone(last_name, 16)
FROM people
GROUP BY metaphone(first_name, 16), metaphone(last_name, 16),
HAVING COUNT(*) > 1
)
ORDER BY last_name, first_name;https://stackoverflow.com/questions/32488728
复制相似问题