- 浏览: 347681 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
pacoson:
感谢楼主。请受小生一拜。
ANT预编译JSP -
zhuhongming123:
一楼的同学Lucene4.* 以上的 已经改成了Numeric ...
Lucene日期排序及组合查询 -
ywjk520:
RangeQuery在哪个包里?
Lucene日期排序及组合查询 -
willwen:
有个疑问,楼主,为何初始化bits 从txt读取已有的网址是直 ...
布隆过滤器(Bloom Filter)之java实例 -
yu_226528:
还不如没有呢
jFreeChart 在jsp页上实现简单的折线图、柱状图
例如:
id name value
1 a pp
2 a pp
3 b iii
4 b pp
5 b pp
6 c pp
7 c pp
8 c iii
id是主键
要求得到这样的结果
id name value
1 a pp
3 b iii
4 b pp
6 c pp
8 c iii
方法1
delete YourTable
where [id] not in (
select max([id]) from YourTable
group by (name + value))
方法2
delete a
from 表 a left join(
select id=min(id) from 表 group by name,value
)b on a.id=b.id
where b.id is null
查询及删除重复记录的SQL语句
查询及删除重复记录的SQL语句
1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
select * from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
delete from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)
3、查找表中多余的重复记录(多个字段)
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
delete from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
(二)
比方说
在A表中存在一个字段“name”,
而且不同记录之间的“name”值有可能会相同,
现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项;
Select Name,Count(*) From A Group By Name Having Count(*) > 1
如果还查性别也相同大则如下:
Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1
(三)
方法一
declare @max integer,@id integer
declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) >; 1
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
delete from 表名 where 主字段 = @id
fetch cur_rows into @id,@max
end
close cur_rows
set rowcount 0 方法二
"重复记录"有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。
1、对于第一种重复,比较容易解决,使用
select distinct * from tableName
就可以得到无重复记录的结果集。
如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。
2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)
最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)
(四)
查询重复
select * from tablename where id in (
select id from tablename
group by id
having count(id) > 1
)
学习sql有一段时间了,发现在我建了一个用来测试的表(没有建索引)中出现了许多的重复记录。后来总结了一些删除重复记录的方法,在Oracle中,可以通过唯一rowid实现删除重复记录;还可以建临时表来实现...这个只提到其中的几种简单实用的方法,希望可以和大家分享(以表employee为例)。
SQL> desc employee
Name Null? Type
----------------------------------------- -------- ------------------
emp_id NUMBER(10)
emp_name VARCHAR2(20)
salary NUMBER(10,2)
可以通过下面的语句查询重复的记录:
SQL> select * from employee;
EMP_ID EMP_NAME SALARY
---------- ---------------------------------------- ----------
1 sunshine 10000
1 sunshine 10000
2 semon 20000
2 semon 20000
3 xyz 30000
2 semon 20000
SQL> select distinct * from employee;
EMP_ID EMP_NAME SALARY
---------- ---------------------------------------- ----------
1 sunshine 10000
2 semon 20000
3 xyz 30000
SQL> select * from employee group by emp_id,emp_name,salary having count (*)>1
EMP_ID EMP_NAME SALARY
---------- ---------------------------------------- ----------
1 sunshine 10000
2 semon 20000
SQL> select * from employee e1
where rowid in (select max(rowid) from employe e2
where e1.emp_id=e2.emp_id and
e1.emp_name=e2.emp_name and e1.salary=e2.salary);
EMP_ID EMP_NAME SALARY
---------- ---------------------------------------- ----------
1 sunshine 10000
3 xyz 30000
2 semon 20000
2. 删除的几种方法:
(1)通过建立临时表来实现
SQL>create table temp_emp as (select distinct * from employee)
SQL> truncate table employee; (清空employee表的数据)
SQL> insert into employee select * from temp_emp; (再将临时表里的内容插回来)
( 2)通过唯一rowid实现删除重复记录.在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在Oracle中的哪一个数据文件、块、行上。在重复的记录中,可能所有列的内容都相同,但rowid不会相同,所以只要确定出重复记录中那些具有最大或最小rowid的就可以了,其余全部删除。
SQL>delete from employee e2 where rowid not in (
select max(e1.rowid) from employee e1 where
e1.emp_id=e2.emp_id and e1.emp_name=e2.emp_name and e1.salary=e2.salary);--这里用min(rowid)也可以。
SQL>delete from employee e2 where rowid <(
select max(e1.rowid) from employee e1 where
e1.emp_id=e2.emp_id and e1.emp_name=e2.emp_name and
e1.salary=e2.salary);
(3)也是通过rowid,但效率更高。
SQL>delete from employee where rowid not in (
select max(t1.rowid) from employee t1 group by
t1.emp_id,t1.emp_name,t1.salary);--这里用min(rowid)也可以。
EMP_ID EMP_NAME SALARY
---------- ---------------------------------------- ----------
1 sunshine 10000
3 xyz 30000
2 semon 20000
SQL> desc employee
Name Null? Type
----------------------------------------- -------- ------------------
emp_id NUMBER(10)
emp_name VARCHAR2(20)
salary NUMBER(10,2)
可以通过下面的语句查询重复的记录:
SQL> select * from employee;
EMP_ID EMP_NAME SALARY
---------- ---------------------------------------- ----------
1 sunshine 10000
1 sunshine 10000
2 semon 20000
2 semon 20000
3 xyz 30000
2 semon 20000
SQL> select distinct * from employee;
EMP_ID EMP_NAME SALARY
---------- ---------------------------------------- ----------
1 sunshine 10000
2 semon 20000
3 xyz 30000
SQL> select * from employee group by emp_id,emp_name,salary having count (*)>1
EMP_ID EMP_NAME SALARY
---------- ---------------------------------------- ----------
1 sunshine 10000
2 semon 20000
SQL> select * from employee e1
where rowid in (select max(rowid) from employe e2
where e1.emp_id=e2.emp_id and
e1.emp_name=e2.emp_name and e1.salary=e2.salary);
EMP_ID EMP_NAME SALARY
---------- ---------------------------------------- ----------
1 sunshine 10000
3 xyz 30000
2 semon 20000
2. 删除的几种方法:
(1)通过建立临时表来实现
SQL>create table temp_emp as (select distinct * from employee)
SQL> truncate table employee; (清空employee表的数据)
SQL> insert into employee select * from temp_emp; (再将临时表里的内容插回来)
( 2)通过唯一rowid实现删除重复记录.在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在Oracle中的哪一个数据文件、块、行上。在重复的记录中,可能所有列的内容都相同,但rowid不会相同,所以只要确定出重复记录中那些具有最大或最小rowid的就可以了,其余全部删除。
SQL>delete from employee e2 where rowid not in (
select max(e1.rowid) from employee e1 where
e1.emp_id=e2.emp_id and e1.emp_name=e2.emp_name and e1.salary=e2.salary);--这里用min(rowid)也可以。
SQL>delete from employee e2 where rowid <(
select max(e1.rowid) from employee e1 where
e1.emp_id=e2.emp_id and e1.emp_name=e2.emp_name and
e1.salary=e2.salary);
(3)也是通过rowid,但效率更高。
SQL>delete from employee where rowid not in (
select max(t1.rowid) from employee t1 group by
t1.emp_id,t1.emp_name,t1.salary);--这里用min(rowid)也可以。
EMP_ID EMP_NAME SALARY
---------- ---------------------------------------- ----------
1 sunshine 10000
3 xyz 30000
2 semon 20000
发表评论
-
mysq的主从复制、备份、还原
2011-11-24 14:51 1294搭建实验环境说明: 在 RH5.4 yum安装 mysql部 ... -
mysql负载均衡完美解决方案V1.0(2)
2011-06-30 14:23 14017.haproxy安装配置 下载编译安装: wget http ... -
mysql负载均衡完美解决方案V1.0(1)
2011-06-30 14:21 1604mysql负载均衡完美解决 ... -
SP2-0618: 无法找到会话标识符
2011-03-11 15:00 1052SQL> set autotrace on;SP2-06 ... -
MYSQL外键(Foreign Key)的使用
2010-08-18 11:30 812在MySQL 3.23.44版本后,InnoDB引擎类型的 ... -
SQL获取所有用户名,数据库名、所有表名、所有字段名及字段类型
2010-08-16 17:56 25611.获取所有用户名:SELECT name FROM Sysu ... -
将mysql中的数据迁移到sqlserver中
2010-07-29 16:40 17521.安装mysql数据库的ODBC驱动,mysql-conn ... -
搞定使用MySQL导入外部的SQL文件执行
2010-07-28 18:41 2244很多的时候都需要将外 ... -
判断数据库中表是否存在,并创建
2010-06-16 15:30 2110//SQLServer 2000 IF NOT EXI ... -
sql server中用sql语句查看表结构信息
2010-05-24 16:37 1155select * from information_schem ... -
Berkeley DB Java Edition 使用手册
2010-05-21 17:06 2217package test; import com.sleep ... -
介绍和使用Berkeley DB Java Edition(嵌入式数据库)
2010-05-21 16:49 1235一、 简介 Berkeley DB Java ... -
Berkely DB Java Edition学习笔记
2010-05-21 16:45 1058Berkely DB对于高并发、要求速度快的应用来说是个不错的 ... -
三种SQL分页方法
2010-02-08 16:06 1034表中主键必须为标识列,[ID] int IDENTITY (1 ... -
经典 SQL 语句集锦(收藏版,必看)
2009-11-11 09:11 955下列语句部分是MsSql语 ... -
SQL操作全集
2009-07-05 20:03 746下列语句部分是Mssql语 ... -
MySQL基本命令总结
2009-06-24 20:25 1116测试环境:mysql 5.0.45【注:可以在mysq ... -
Oracle数据库开发的一些经验积累
2009-06-18 23:23 9521、不安装Oracle客户连接Oracle 8的方法请将以下文 ... -
Oracle函数列表
2009-06-18 23:09 827PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并 ... -
Oracle临时表空间Temp满了怎么办
2009-06-18 23:04 3076最近遇到这样一个问 ...
相关推荐
另一种方法是通过自连接来删除重复记录,例如: ```sql DELETE FROM employee e1 WHERE EXISTS ( SELECT 1 FROM employee e2 WHERE e1.emp_id = e2.emp_id AND e1.emp_name = e2.emp_name AND e1.salary = e2....
Oracle 快速删除重复记录 在 Oracle 数据库中,删除重复记录是一项常见的操作,尤其是在大型数据表中。...删除重复记录可以使用多种方法,每种方法都有其优缺点。选择合适的方法取决于具体的应用场景和数据特点。
- **SQL0064N:** 表示无法删除正在使用的表。 - **SQL0065N:** 表示未知错误。 - **SQL0078N:** 表示未指定表。 - **SQL0079N:** 表示会话模式设置错误。 - **SQL0081N:** 表示预编译时发生错误。 - **SQL0082C:** ...
本文将详细介绍如何使用SQL语句来添加、删除和修改表中的字段,以及其他一些基本的操作。 #### 二、增加字段 增加字段使用`ALTER TABLE`语句,其基本格式如下: ```sql ALTER TABLE 表名 ADD 字段名 数据类型; ```...
本文将通过一个具体的实例来讲解如何使用SQL语句来删除重复数据。 首先,假设我们有一个名为`@InvoiceListMaster`的临时表,该表包含了公司名称(companyName)、发票号码(invoiceNumber)和客户编号...
Minus运算符可以用来删除重复的记录,我们可以使用它来删除前面的记录,从而实现分页查询。 例如,以下SQL语句可以查询表t_table_name的第11-20条记录: ```sql SELECT t_col1,t_col2 FROM t_table_name WHERE ...
│ │ 6.1.2 多表联结导致记录重复的示例.sql │ │ 6.1.3 使用UNION实现库存报表的示例.sql │ │ 6.1.5 按指定上下限区间进行数据统计的示例.sql │ │ 6.1.6 随机出题的示例.sql │ │ 6.2.1 ROLLUP实现的分级...
- **数据操作**:在批量插入、更新或删除数据时,如果操作的表格或记录集不固定,动态SQL可提供解决方案。 **3. MSSQL中的动态SQL基本语法** 在MSSQL中,动态SQL通常通过`EXEC`或`sp_executesql`系统存储过程来执行...
17. 删除重复记录:删除重复记录通常涉及使用`GROUP BY`和`HAVING`子句,或者通过自连接和`DISTINCT`关键字来实现。 以上是SQL语句的一些常见用途和示例,它们在数据库管理、数据分析以及应用开发中扮演着重要角色...
19. **删除重复记录**: - 删除所有非最小ID的重复记录,可以使用子查询和`NOT IN`。 以上是SQL面试中可能遇到的一些高级问题和解答,涵盖了表操作、查询优化、联接、聚合函数、分页、子查询等多个方面,对于理解...
使用`DISTINCT`关键字可以查询数据库表内不重复的记录。例如: ```sql SELECT DISTINCT 字段名 FROM 数据表; ``` 2. **计数查询**: `COUNT(*)`函数可以计算表中的记录数。如果要按特定字段计数,可以这样做:...
在本篇内容中,我们将深入探讨如何使用SQL进行表和字段的基本操作,包括添加、删除和修改字段,以及数据库对象的重命名和查询。这些操作对于数据库管理、数据分析以及开发人员来说至关重要。 1. **添加字段**: 要...
删除表中的记录可以用以下命令: ```sql DELETE FROM 课程 WHERE 课程号 = 1; ``` #### 8. 数据查询 (SELECT) - **8.1 Select命令各子句执行顺序** SELECT命令的执行顺序通常为FROM -> WHERE -> GROUP BY -...
SELECT语句可以实现从指定表或视图中选取数据、去除重复记录(DISTINCT)、连接多个表(UNION)、选取前N条记录(TOP)等功能。 **9. 使用GROUP BY进行分组时,可配合哪些聚合函数使用:** - **A:** ORDER BY, ...
- 删除名称重复的记录:结合窗口函数或自关联删除重复项。 5. 使用字符串 - 遍历字符串:利用数据库函数逐个处理字符串中的字符。 - 字符串文字中包含引号:使用转义字符处理引号。 - 计算字符在字符串中出现的...
4.16删除重复记录 4.17删除从其他表引用的记录 第5章 元数据查询 第6章 使用字符串 第7章 使用数字 第8章 日期运算 第9章 日期操作 第10章 范围处理 第11章 高级查找 第12章 报表和数据仓库运算 第...
* 用 Transact-SQL 语句创建索引:使用 CREATE INDEX 语句创建索引,例如 CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name ON { table | view } ( column [ ASC | DESC ] [ ...n ] ) [ WITH [PAD_...