数据库中怎么删除重复的记录,只保留唯一的记录

数据库中怎么删除重复的记录,只保留唯一的记录,第1张

方法很多,说一个最简单的。

先建一个表,结构和原来的表一样,但是在你要去重的列建立一个主键,并设置“忽略重复键”,把原表中的所有数据插入这个新表,

此时新表中的数据就已经是非重复的了。

把原表数据都删掉,把新表中的数据都导回来就ok了

使用distinct去重:

例:select distinct column1,column2 from table_name where ;

注意:1distinct只能放在去重字段的最前面

2distinct 后的字段名全部算在去重条件中 也就是如果 column1 且 column2 必须都相同才能算作重复的记录

有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如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 testid,count(1) from testtable group by testid having count(1)>1

count(1)就是重复在数量

如何查询重复的数据

select 字段1,字段2,count() from 表名 group by 字段1,字段2 having count() > 1

PS:将上面的>号改为=号就可以查询出没有重复的数据了。

Oracle删除重复数据的SQL(删除所有):

删除重复数据的基本结构写法:

想要删除这些重复的数据,可以使用下面语句进行删除

delete from 表名 a where 字段1,字段2 in(select 字段1,字段2,count() from 表名 group by 字段1,字段2 having count() > 1)

上面的SQL注意:语句非常简单,就是将查询到的数据删除掉。不过这种删除执行的效率非常低,对于大数据量来说,可能会将数据库吊死。

建议先将查询到的重复的数据插入到一个临时表中,然后对进行删除,这样,执行删除的时候就不用再进行一次查询了。如下:

CREATE TABLE 临时表 AS (select 字段1,字段2,count() from 表名 group by 字段1,字段2 having count() > 1)

上面这句话就是建立了临时表,并将查询到的数据插入其中。

下面就可以进行这样的删除 *** 作了:

delete from 表名 a where 字段1,字段2 in (select 字段1,字段2 from 临时表);

可以使用row_number()函数,该函数可以将相同的数据做归类,并附加一列,作为序数列,sql如下:

select ,ROW_NUMBER() over (partition by address order by age desc) as rw

from stu;

只要在该查询结果集外再嵌套一个取出rw=1的sql语句即可,如下:

select from (

select ,ROW_NUMBER() over (partition by address order by age desc) as rw

from stu ) as t1

where rw = 1;

将TT表替换成你的查询语句。

另外你得保证,检查部位中都是以空格为分隔符的。

还有,对于第20行数据的胸部正位片,实在是没办法,你最好修剪下数据。

SELECT

SUBSTR

(LTRIM

(检查部位,

'

'),

idx1,

idx2

-

idx1)

FROM

(SELECT

检查部位,

NVL

(LAG

(idx)

OVER

(ORDER

BY

ROWNUM)

+

1,

1)

idx1,

idx

idx2

FROM

(SELECT

DISTINCT

检查部位,

idx

FROM

(SELECT

检查部位,

DECODE

(INSTR

(LTRIM

(检查部位,

'

'),

'

',

ROWNUM

),

0,

LENGTH

(LTRIM

(检查部位,

'

'

)

)

+

1,

INSTR

(LTRIM

(检查部位,

'

'),

'

',

ROWNUM

)

)

idx

FROM

tt

CONNECT

BY

ROWNUM

<=

LENGTH

(LTRIM

(检查部位,

'

')))

ORDER

BY

idx))

select distinct from table;

部分重复的话可以用

select distinct col1,col2 from table;

进阶用法

有些既要显示所有的字段又要筛除重复的可以这样:

select max(col1),max(col2),col3,col4 from table group by col3,col4;

from os import listdir

fn = 'datatxt'

origin = listdir('')

"""

s='''

id || name || age

1   || jie || 28

2   || ping || 25

'''

with open(fn, 'w') as f:

    fwrite(s)

"""

with open(fn) as f:

    s = fread()

L = sstrip()split('\n')

LL = [[jstrip() for j in isplit('||')] for i in L]

collumn_names = LL[0]

c_len = len(collumn_names)

collumns = [set() for i in range(c_len)]

for i in LL[1:]:

    for j in range(len(i)):

        collumns[j]add(i[j])

for i, j in zip(collumn_names, collumns):

    with open(i + 'txt', 'w') as f:

        fwrite('\n'join([i] + sorted(j)))

print('new files: ', ', 'join([i for i in listdir('') if i not in origin]))

以上就是关于数据库中怎么删除重复的记录,只保留唯一的记录全部的内容,包括:数据库中怎么删除重复的记录,只保留唯一的记录、关于数据库去重的方法求助、ACCESS数据库内如何去除某字段重复记录等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9703966.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存