数据库删除完全重复和部分关键字段重复的记录_数据库其它

1、第一种重复很容易解决,不同数据库环境下方法相似: 

以下为引用的内容:
Mysql 

create table tmp select distinct * from tableName; 

drop table tableName; 

create table tableName select * from tmp; 

drop table tmp; 

SQL Server 

select distinct * into #Tmp from tableName; 

drop table tableName; 

select * into tableName from #Tmp; 

drop table #Tmp; 

Oracle 

create table tmp as select distinct * from tableName; 

drop table tableName; 

create table tableName as select * from tmp; 

drop table tmp; 

发生这种重复的原因是由于表设计不周而产生的,增加唯一索引列就可以解决此问题。 

2、此类重复问题通常要求保留重复记录中的第一条记录,操作方法如下。 假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集 

Mysql 

以下为引用的内容:
alter table tableName add autoID int auto_increment not null; 

create table tmp select min(autoID) as autoID from tableName group by Name,Address; 

create table tmp2 select tableName.* from tableName,tmp where tableName.autoID = tmp.autoID; 

drop table tableName; 

rename table tmp2 to tableName; 

SQL Server 

select identity(int,1,1) as autoID, * into #Tmp from tableName; 

select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,Address; 

drop table tableName; 

select * into tableName from #Tmp where autoID in(select autoID from #Tmp2); 

drop table #Tmp; 

drop table #Tmp2; 

Oracle 

DELETE FROM tableName t1 WHERE t1.ROWID > (SELECT MIN(t2.ROWID) FROM tableName t2 WHERE t2.Name = t1.Name and t2.Address = t1.Address); 

 

说明: 

1. MySQL和SQL Server中最后一个select得到了Name,Address不重复的结果集(多了一个autoID字段,在大家实际写时可以写在select子句中省去此列) 

2. 因为MySQL和SQL Server没有提供rowid机制,所以需要通过一个autoID列来实现行的唯一性,而利用Oracle的rowid处理就方便多了。而且使用ROWID是最高效的删除重复记录方法。

时间: 2024-10-22 18:21:14

数据库删除完全重复和部分关键字段重复的记录_数据库其它的相关文章

ASP获取数据库表名、库名、字段名的方法_应用技巧

ASP获取数据库表名,字段名 以SQLServer为例: 复制代码 代码如下: < %   SET Conn=Server.CreateObject("ADODB.Connection")   Conn.Open "Server=IP地址;Provider=sqloledb;Database=库名称;UID=用户名;PWD=密码;"   %> 读SqlServer库中的表名: 复制代码 代码如下: < %   Set rs=Conn.OpenSch

在CRUD操作中与业务无关的SQL字段赋值的方法_数据库其它

提高效率一直是个永恒的话题,编程中有一项也是可以提到效率的,那就是专注做一件事情,让其它没有强紧密联系的与之分开.这里分享下我们做CRUD时遇到的常见数据处理场景: •数据库表字段全部设计为非空,即使这个字段在业务上是可以为空的,之所以将数据库表字段全部设计为非空,这里有优点也有缺点,我们认为优点大于缺点,所以选择了它 优点: 1.获取值时,不用判断这个字段是否为null,直接可用于逻辑运算. 2.mysql DBA推荐此方案,可能是有利于性能,这里我并非求证过. 缺点: 1.业务含义没有nul

asp获取数据库中表名和字段名的代码_数据库相关

复制代码 代码如下: < % '功能:显示数据库中表名.字段名.字段内容 '原创:wangsdong '原创文章,转载请保留此信息,谢谢 set rs=server.CreateObject("adodb.recordset") db="db1.mdb" set conn=server.CreateObject("adodb.connection") connstr="Provider=Microsoft.Jet.OLEDB.4.

MSSQL转MYSQL的一些记录_数据库其它

1.用MSSQL企业管理器,打开表的结构(设计表),本地用phpmyadmin根据结构一个一个创建,同时优化了一下表数据字段,表创建完成.2.用企业管理器导出单表,导入源选择文本,分隔符选择;,原为',',因phpmyadmin默认的是;,所以这里选择;.导出一个文本文件.3.用phpmyadmin单表导入功能,选择下面的 CSV 使用 LOAD DATA,就可以将表内容导入了.完成! 如 果字段比较多,或者记录很多,那么这种方法就不适用了,就需要借助于软件来帮忙.目前,据enjoy所知,有两款

MSSQL转MySQL数据库的实际操作记录_数据库其它

以下的文章主要介绍的是MSSQL转MySQL数据库的一些记录的实际操作流程,以及在其实际操作中发现的问题的阐述,其中包括建表问题,编码问题,以下就是文章的主要主要内容描述,望你会有所收获. 今天把一个MSSQL的数据库转成MySQL,在没有转换工具的情况下,对于字段不多的数据表我用了如下手功转换的方法,还算方便.MSSQL使用企业管理器操作,MySQL用phpmyadmin操作. 1.用MSSQL企业管理器,打开表的结构(设计表),本地用phpmyadmin根据结构一个一个创建,同时优化了一下表

postgresql sql批量更新记录_数据库其它

复制代码 代码如下: CREATE FUNCTION updateTchrNm() RETURNS void AS $body$ DECLARE rownum integer := 1; BEGIN while rownum <= 1000 LOOP     update t_tchr set tchr_nm = '田中愛子' || rownum, tchr_knm = 'タナカアイコ' || rownum, tchr_anm = 'tanaka' || rownum where tchr_cd

SQL排除重复结果只取字段最大值分享_MsSql

如何用SQL排除重复结果只取字段最大值的记录?要求得到的结果(即是PID相同的记录只取ID值最大的那一条). 复制代码 代码如下: select * from [Sheet1$] awhere  ID not exists (select 1 from [Sheet1$] where PID=a.PID and ID>a.ID) select a.* from [Sheet1$] a inner join (select PID,max(ID) as max_id from [Sheet1$]

SQL排除重复结果只取字段最大值分享

如何用SQL排除重复结果只取字段最大值的记录?要求得到的结果(即是PID相同的记录只取ID值最大的那一条).复制代码 代码如下:select * from [Sheet1$] awhere  ID not exists (select 1 from [Sheet1$] where PID=a.PID and ID>a.ID) select a.* from [Sheet1$] a inner join (select PID,max(ID) as max_id from [Sheet1$] gr

Delphi中如何控制关键字段的重复输入及报错

下面以一个实例来说明:在 'c:\' 下有一个数据库'Renshi.dbf',字段为:'bianhao':'xingming',类型为字符型,以关键字段'bianhao'为索引字段,建立数据库的连接. 我们用控件DBNavigator1.DataSource1.Table1.DBedit1. DBedit2.Table2来建立数据库的连接.其各属性为: Table1.databasename:=c:\;Table1.tablename:=renshi.dbf;Table1.active:=tru