求sql语句,只修改重复数据中的一条记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求sql语句,只修改重复数据中的一条记录相关的知识,希望对你有一定的参考价值。

A B C
1 1 1
1 1 1
1 1 1
怎样写修改语句,只修改其中一条记录啊?
没有设置ID字段,
这个表只有这三个数据。。
update 表名 set A=.. where A in (select top 1 A from 表名 where ...)
这句我试过不行,是因为没有ID字段?

不会是id都相同吧

select A from 表 group by A having count(A)>1

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

)
参考技术A 用视图就可以啊
create view v1(
A,B,C,D) as
select A,B,C,row_number() over(partition by A,B,C order by A) as D
from 表名
update v1 set A='新值A',B='新值B',C='新值C' WHERE D='1'
--这样就完全能满足你的要求 我测试过了,更新视图就完全可以了,楼主可以试试
参考技术B 数据库 ms sql2005下,
如果数据不重复的就不修改,则如下
with aa as
(select row_number() over(partition by a,b,c order by a,b,c) as rn,* from 表)
update aa set A=...
where rn=2

如果不管是否重复
with aa as
(select row_number() over(partition by a,b,c order by a,b,c) as rn,* from 表)
update aa set A=...
where rn=1

怎么删除ACCESS中的重复记录 只保留一条

怎么删除ACCESS中的重复记录 只保留一条
悬赏分:100 - 离问题结束还有 14 天 22 小时
怎么删除ACCESS中的重复记录 只保留一条
RT

表 data
删除
字段 name 里面 重复的数据 只留一条,其他字段重复的就跟删掉,

有什么方法??

SQL语句咋写的???

谁把我上面提供的表 跟字段
写个句子,谢谢

首先备份你的数据库.然后尝试下面的方法.从表中删除重复记录需要两个步骤.
第一步,创建包含重复项的表结构的副本,然后生成所有包含重复项的字段的主键.
第二步,创建并执行由原始表到新表的追加查询。因为主键字段不能包含重复记录,所以此过程将生成一个不含重复记录的表.复制表并生成包含重复项的字段的主键
操作方法:在“数据库”窗口中,单击“对象”下的“表”
单击要删除重复记录的表名称。
单击工具栏上的“复制”
单击工具栏上的“粘贴”。
在“粘贴表方式”对话框中,键入复制表的名字,再单击“只粘贴结构”选项,然后单击“确定”按钮。
在“设计”视图中打开新表,然后在复制的表中选择包含重复项的字段。
单击工具栏上的“主键”按钮,以便根据选定的字段创建主键。
保存并关闭表。在新表中追加唯一值记录。
操作方法:根据包含重复项的原始表新建一个查询。
在查询“设计”视图中,单击工具栏上的“查询类型”,再单击“追加查询”。
在“追加”对话框中,在“表名称”列表中单击新表的名称,然后单击“确定”。
将星号(*)拖到查询设计网格,使新表包含原始表的所有字段。
单击工具栏上的“运行”。
收到追加行的信息时,请单击“是”按钮。
收到MicrosoftAccess不能在追加查询中添加全部记录的信息时,请单击“是”按钮。这次仅将有唯一值的记录传送到新表中,并丢弃了重复项。
打开表查看结果。
确定新表有正确的唯一记录后,就可以删除原始表,然后使用原始表名来为新表重新命名。我是学MSSQL的,所以对MSSQL更熟悉
但Access也略知一二希望这个方法能够帮到你.再次提醒,请先备份你的mdb建议:
为了以后避免这些不必要的问题.可以把不允许重复的字段设为主键.
参考技术A Sub del()
Dim Rs As New ADODB.Recordset
Rs.Open "select * from a", CurrentProject.Connection, adOpenDynamic, adLockOptimistic 'a为我要删除的有重复记录的表,先对a表做一些处理:"隶属单位"字段按生或者降序排列,这样,相同的记录都是按顺序排列了,

Dim del1As String '定义一个字符窜变量,存放"隶属单位"字段值,用他和当前记录做比较,值相同则删除当前记录,不同则将当前记录赋值给字符变量DEL1.
Rs.MoveFirst

del1 = Rs.Fields(5).Value'这里可以优化,将第一条记录的"隶属单位"值赋给变量,"隶属单位"在表的第6列上,从0开始数的,Rs.Fields(5).Value
Do While Not Rs.EOF

Rs.MoveNext
Debug.Print del1
If Rs.Fields(5).Value = del1 Then

Rs.Delete 'adAffectCurrent
Else

del1 = Rs.Fields(5).Value

End If

Loop
Set Rs = Nothing

End Sub
参考技术B

最简单的方法如下:

    点击查询-新建-查找重复项查询向导,建立一个查询。

    运行查询,你会看到表中所有的重复项记录。

    除保留一条外选中其余所有记录,点击DELETE键即可删除所有被选中的记录。


以上是关于求sql语句,只修改重复数据中的一条记录的主要内容,如果未能解决你的问题,请参考以下文章

mysql中删除重复记录,并保留重复数据中的一条数据的SQL语句

sql中如何使一列中的多个重复数据只显示第一条

删除oracle 表中重复数据sql语句保留rowid最小的一条记录

怎么删除ACCESS中的重复记录 只保留一条

SQL删除重复数据只保留一条

sql中如何使一列中的多个重复数据只显示一次, 求大神指导,使得图中的班简名重复的只显示一次。