首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL选择在组中找到的整个记录

SQL选择在组中找到的整个记录
EN

Stack Overflow用户
提问于 2015-09-09 20:36:54
回答 1查看 43关注 0票数 0

我正在利用PostgreSQL中的metaphone函数来查找可能拼写错误的重复记录。

代码语言:javascript
复制
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个潜在的副本是很好的,但是我不能对此做太多的工作,因为我无法从查询结果中获得任何唯一的标识信息。我试过这个:

代码语言:javascript
复制
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个‘无名氏’。我可能只有一个“简·多伊”,但她会出现在第二个查询的结果中。

是否有更准确地获取用于编译第一个查询结果的行的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-09 20:43:17

您需要同时进行两种比较:

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32488728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档