社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

jxc

jxc 最近创建的主题
jxc 最近回复了
6 年前
回复了 jxc 创建的主题 » 在mysql中查找重复记录

您可以使用子查询查找其相关重复记录的min(id)(在您的示例中,使用 地址 与他们交往)。这 最小(id) 会是你原来的那个(我想 身份证件 是一个自动递增的主键)。因此,可以使用id>this min(id)查找所有额外的重复记录,请参见以下示例:

CREATE TABLE `person` (
  `id` int not null auto_increment primary key,
  `firstname` VARCHAR(32),
  `lastname` VARCHAR(32),
  `address` VARCHAR(128)
);

INSERT INTO `person`
  (`firstname`, `lastname`, `address`)
VALUES
  ('Jim', 'Jones', '100 MAIN ST'),
  ('Jim', 'Smith', '100 MAIN ST'),
  ('John', 'Smith', '100 MAIN ST'),
  ('Alex', 'Smith', '23 Wall St'),
  ('Fox', 'Smith', '23 Wall St'),
  ('John', 'Smith', '100 main St');

SELECT id
,      firstname
,      lastname
,      address
FROM person p
WHERE id > (
    SELECT min(id) FROM person p1 
    WHERE p1.address = p.address
    GROUP BY p1.address
    HAVING count(*) > 1
)

对于示例数据,当我们使用 地址 只检查重复的。您可以调整子查询以反映具有多个列的唯一约束,即具有address+lastname:

WHERE id > (
    SELECT min(id) FROM person p1 
    WHERE p1.address = p.address
    AND p1.lastname = p.lastname
    GROUP BY p1.address, p1.lastname
    HAVING count(*) > 1
)