过滤掉多行中的mysql重复记录

Posted

技术标签:

【中文标题】过滤掉多行中的mysql重复记录【英文标题】:filter out mysql duplicate record in multiple rows 【发布时间】:2013-01-10 11:37:06 【问题描述】:

各位急需帮助!

我有一个 mysql 数据库,它有超过 158,000 条记录,其中有一些重复的数据。我想列出这些重复的数据 为了更清楚我到底在寻找什么:

mysql 表名是postal。列是 id、street、zipcode、locality 和 city

    id:1,邮政编码:123456,街道:street1,地点:locality1,城市:cityA

    id:2,邮政编码:123456,街道:street2,地点:locality1,城市:cityA

    id:3,邮政编码:123456,街道:street3,地点:locality1,城市:cityA

    id:4,邮政编码:123457,街道:street4,地点:locality1,城市:cityA

    id:5,邮政编码:123458,街道:street5,地点:locality1,城市:cityA

    id:6,邮政编码:166666,街道:street6,地区:locality26,城市:cityDE

    id:7,邮政编码:177777,街道:street7,地区:locality38,城市:cityEF

这些值是允许的!这是已输入 mysql db 表的数据的粗略草图:postal

相同 邮政编码(例如:id=1,2,3)会有不同的街道值,但只有一个地区名称 是允许的。此外,不同邮政编码(例如:id=3,4,5)可能有也可能没有不同的地区。请不要对此感到困惑。 我面临的问题是,我发现了一些这样的记录:

    id:11,邮政编码:111111,街道:street1,地点:locality1,城市:cityA

    id:25,邮政编码:111111,街道:street2,地点:locality2,城市:cityA

    id:56,邮政编码:111111,街道:street3,地点:locality3,城市:cityA

您会注意到 same zipcode(例如:id=11,25,56)具有完全不同的 locality 值,即不允许。同一邮政编码只允许使用一个位置值。

请建议我使用 sql 查询字符串来过滤掉包含不同位置值的邮政编码。请不要超过 150,000 条记录。

注意:我不是要求可以根据 pincode 对值进行排序的 sql 查询,我正在寻找一种方法来查找具有不同 locality 值的 zipcode

【问题讨论】:

冷静下来。那些感叹号让我很紧张。 150,000 条记录对于数据库来说并没有那么大。 【参考方案1】:

试试这个:

SELECT 
    postal.*
FROM 
    postal 
GROUP BY 
    zipcode
HAVING
    COUNT(DISTINCT(locality)) > 1

【讨论】:

我不是要求可以根据 pincode 对值进行排序的 sql 查询,我正在寻找一种方法来查找包含不同位置值的邮政编码 bhai,这只是给我一个结果,它也显示具有相同邮政编码的地区。我需要一个显示不同代码的地区的列表【参考方案2】:
SELECT id,locality,zipcode,locality,city
FROM postal t1
WHERE EXISTS (

SELECT id,locality,zipcode,locality,city
FROM postal t2
WHERE t2.id <> t1.id
AND t2.zipcode = t1.zipcode
AND t2.locality != t1.locality
)
LIMIT 0,30

帮我解决了这个问题。!现在它的工作!

【讨论】:

以上是关于过滤掉多行中的mysql重复记录的主要内容,如果未能解决你的问题,请参考以下文章

distinct mysql过滤重复记录

php mysql 过滤重复记录并排序

解析mysql中:单表distinct多表group by查询去除重复记录

MySQL根据列删除重复数据

mysql distinct

在 PHP/MYSQL 中计算过滤器记录 [重复]