社区所有版块导航
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
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

在mysql中查找重复记录

rabin samanta • 5 年前 • 1613 次点击  

我想在MySQL数据库中提取重复的记录。这可以通过以下方法完成:

SELECT firstname, 
   lastname, 
   list.address 
FROM list
   INNER JOIN (SELECT address
               FROM   list
               GROUP  BY address
               HAVING COUNT(id) > 1) dup
           ON list.address = dup.address;

结果是:

JIM    JONES    100 MAIN ST
JOHN   SMITH    100 MAIN ST

我想把它拉出来,让它显示每一行是重复的。类似于:

JIM    JONES    100 MAIN ST

如果结果是:

JIM    JONES    100 MAIN ST
JOHN   SMITH    100 MAIN ST
JOHN   SMITH    100 MAIN ST

我想把它拉出来,让它显示每一行是重复的。类似于:

JOHN   SMITH    100 MAIN ST
JOHN   SMITH    100 MAIN ST

我只想要重复的数据而不是原始数据

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/51167
 
1613 次点击  
文章 [ 2 ]  |  最新文章 5 年前
Zaynul Abadin Tuhin
Reply   •   1 楼
Zaynul Abadin Tuhin    6 年前

使用子查询尝试

select * from person
where (firstname
,      lastname
,      address) in (

select firstname
,      lastname
,      address from person
group by firstname
,      lastname
,      address having count(*)>1
)

输出

id  firstname   lastname    address
3   John        Smith      100 MAIN ST

6   John        Smith      100 main St

demo

jxc
Reply   •   2 楼
jxc    6 年前

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