Oracle 数据库:按字段查重复数据并仅保留一条的方法及示例
在 Oracle 数据库中,如果你想根据某个字段查看表中的重复数据并保留一条记录,可以使用以下步骤: 1. 查找重复数据:首先,你需要找到那些在特定字段上具有重复值的记录。 2. 删除重复数据:然后,你可以删除这些重复记录,只保留一条。 假设你有一个表 `my_table`,并且你想根据字段 `column_name` 来查找和删除重复的数据。以下是实现这一目标的 SQL 语句: 查找重复数据 ```sql SELECT column_name, COUNT(*) FROM my_table GROUP BY column_name HAVING COUNT(*) > 1; ``` 这个查询会返回所有在 `column_name` 上有重复值的记录及其出现的次数。 删除重复数据(保留一条) 为了删除重复数据并保留一条记录,你可以使用一个子查询来标识要保留的记录。例如,假设你有一个唯一标识符 `id` 字段,你可以这样做: ```sql DELETE FROM my_table a WHERE a.id NOT IN ( SELECT MIN(b.id) FROM my_table b GROUP BY b.column_name ); ``` 在这个查询中: - 子查询 `SELECT MIN(b.id) FROM my_table b GROUP BY b.column_name` 会为每个 `column_name` 找出最小的 `id`。 - 主查询 `DELETE FROM my_table a WHERE a.id NOT IN (...)` 会删除那些不在子查询结果中的记录,从而保留每组重复记录中的一条。 示例 假设你的表结构如下: ```sql CREATE TABLE my_table ( id NUMBER PRIMARY KEY, column_name VARCHAR2(50), other_column VARCHAR2(50) ); ``` 插入一些示例数据: ```sql INSERT INTO my_table (id, column_name, other_column) VALUES (1, 'A', 'Data1'); INSERT INTO my_table (id, column_name, other_column) VALUES (2, 'B', 'Data2'); INSERT INTO my_table (id, column_name, other_column) VALUES (3, 'A', 'Data3'); INSERT INTO my_table (id, column_name, other_column) VALUES (4, 'C', 'Data4'); INSERT INTO my_table (id, column_name, other_column) VALUES (5, 'B', 'Data5'); ``` 执行查找重复数据的查询: ```sql SELECT column_name, COUNT(*) FROM my_table GROUP BY column_name HAVING COUNT(*) > 1; ``` 输出可能是: | COLUMN_NAME | COUNT(*) | |-------------|----------| | A | 2 | | B | 2 | 然后执行删除重复数据的查询: ```sql DELETE FROM my_table a WHERE a.id NOT IN ( SELECT MIN(b.id) FROM my_table b GROUP BY b.column_name ); ``` 执行后,表中的数据将变为: | ID | COLUMN_NAME | OTHER_COLUMN | |----|-------------|--------------| | 1 | A | Data1 | | 2 | B | Data2 | | 4 | C | Data4 | 这样你就保留了每组重复记录中的一条。 ######[AI写代码神器 | 839点数解答 | 2024-11-08 18:27:28]
- Java 实现计算机硬件模拟:从 PCI 设备到主板、计算机的启动与关闭(字节豆包 | 716点数解答 | 2024-12-08 23:38:38)356
- Java 代码:模拟计算机主板启动与关闭 PCI 设备全流程(字节豆包 | 637点数解答 | 2024-12-09 08:31:54)323
- MySQL 数据库操作:用德鲁伊连接池和 Spring JDBC 实现 MVC 架构下 Student 表操作及事务测试全解析(字节豆包 | 1115点数解答 | 2025-03-19 11:17:31)314
- Spring JDBC+德鲁伊连接池:MVC架构下MySQL学生表查询、事务验证及代码实现全解析(DeepSeek | 1275点数解答 | 2025-03-19 11:21:32)299
- Java实现链表反转:迭代与递归双解法详解及开发实战指南(DeepSeek | 1409点数解答 | 2026-03-15 15:09:29)60
- Java 实战:Vehicle 类与 User 类实现机动车速度功率控制( | 968点数解答 | 2024-03-12 11:26:25)569
- Java代码实现从JSON数据中提取ID,涉及“数据”与“项目 - 知识库”结构(字节豆包 | 603点数解答 | 2025-04-15 22:48:51)257
- C++ 实现:计算一排鹅与最高、最矮鹅的身高差及代码详解(字节豆包 | 549点数解答 | 2025-11-16 20:19:06)107
- 编程揭秘:计算 𝑛! 在 𝑃 进制下末尾零个数的方法与代码实现(DeepSeek | 549点数解答 | 2026-01-11 17:49:54)65
- Oracle数据库函数中循环的使用方法及注意事项( | 312点数解答 | 2024-04-07 11:22:19)295
- Python 编程:轻松计算飞机行李收费(含代码详解)(字节豆包 | 250点数解答 | 2026-01-29 17:07:02)46
- Python 实现浮点数转百分比并保留 2 位小数(字节豆包 | 181点数解答 | 2026-03-14 18:09:36)25