
方法很多,说一个最简单的。
先建一个表,结构和原来的表一样,但是在你要去重的列建立一个主键,并设置“忽略重复键”,把原表中的所有数据插入这个新表,
此时新表中的数据就已经是非重复的了。
把原表数据都删掉,把新表中的数据都导回来就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数据库内如何去除某字段重复记录等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)