您可以使用子查询查找其相关重复记录的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
)