相关文章推荐
挂过科的葡萄  ·  使用MERGE ...·  1 月前    · 
爱看球的杨桃  ·  使用 FOR JSON 將查詢結果格式化為 ...·  3 周前    · 
精明的白开水  ·  MySQL插入循环存储过程问题:最后一行重复 ...·  4 天前    · 
沉稳的油条  ·  MySQL数据库精选(从入门使用到底层结构) ...·  4 天前    · 
不拘小节的排球  ·  GitHub - ...·  10 月前    · 
安静的海龟  ·  python将字符串中英文单双引号改为中文单 ...·  1 年前    · 
愤怒的毛巾  ·  倒卖精灵奴隶,但是哥布林巢穴(重生开始写网文 ...·  1 年前    · 
帅气的木耳  ·  Groovy之常用字符串操作_groovy ...·  1 年前    · 
年轻有为的双杠  ·  sql ...·  1 年前    · 
Code  ›  sqlserver - 如何大量修改关联数据并删除重复数据 -
大数据 select
https://segmentfault.com/q/1010000010429830
好帅的苦瓜
2 年前
segmentfault segmentfault
注册登录
问答 博客 标签 活动
发现
✓ 使用“Bing”搜本站 使用“Google”搜本站 使用“百度”搜本站 站内搜索
注册登录
  1. 首页
  2. 问答
  3. sqlserver
  4. 问答详情

如何大量修改关联数据并删除重复数据

头像
William
50 2 14 21
发布于
2017-07-31

现在库里有两张表,一张是信息表,一张是用户表。
信息表通过用户id计算的code进行关联。
也就是存在一个用户对应多个信息的情况。
大致可以这么描述:
信息表<id,内容,时间,用户code,>
用户表<id,用户code,用户信息>,
目前因为入库时数据的去重处理问题,导致了用户表大量的同一个用户id拥有了不同的用户code。(即同一个用户信息出现了多次,除了用户code和入库时间不一致以外,其他可以理解为完全一致)
我想要删除重复的用户,只保留一个最新的用户信息。
可是在对用户进行处理的时候,如何保证删除掉的那些用户code对应的信息表的code改成了保留的那个code。
量很大,求指教如何进行处理?
eg: 类似于这样的图信息

sqlserver sql语句
阅读 3.1k
3 个回答
得票 最新
头像
William
50 2 14 21
发布于
2017-08-07
✓ 已被采纳

WITH CTET AS (
SELECT *,ROW_NUMBER()OVER(PARTITION BY ID ORDER BY 入库时间) AS RN
FROM 用户表
)
UPDATE t2
SET 用户code = t3.用户code
FROM CTET AS t1

    INNER JOIN 信息表 AS t2 ON t1.用户code = t2.用户code
    INNER JOIN CTET AS t3 ON t3.ID = t1.ID
                             AND t3.RN = 1

WHERE t1.RN > 1;

头像
Unique
811 2 21 42
发布于
2017-08-01
更新于
2017-08-01
--信息表 TableInfo
--用户表 TableUser
--用户code  UserCode
--删除表中多余的重复记录,重复记录是根据单个字段(UserCode)来判断,只留有UserCode最小的记录
delete from [TableUser]
       where 
            Id in (select Id from [TableUser] group by Id having count(Id) > 1) 
            UserCode not in (select min(UserCode) from [TableUser] group by UserCode having count(UserCode)>1)          
头像
ch21st
467 1 4
发布于
2017-08-04
更新于
2017-08-04

建议你在用户表加个字段,将用一个id的用户归并成同一个用户code,比如:

if object_id('tempdb..#user') is not null drop table #user
if object_id('tempdb..#DAT') is not null drop table #DAT
create table #user(id VARCHAR(10),code VARCHAR(10),u_name NVARCHAR(10),CreatedDate DATETIME)
insert into #user
select 'A_111','1514',N'A','20170731' union all
select 'A_111','1314',N'A','20170730' union all
select 'A_111','1111',N'A','20170718' union all
select 'A_222','1320',N'B','20170718' union all
select 'A_333','1450',N'C','20170718' union all
select 'A_333','1350',N'C','20170719'
CREATE TABLE #DAT(id INT,DAT VARCHAR(100),UserCode VARCHAR(10),CreatedDate DATETIME)
insert into #DAT
select 1,'AAA','1514','20170730' union all
select 2,'SSS','1314','20170729' union all
select 3,'BBB','1111','20170728' union all
select 4,'QQQ','1111','20170727' union all
select 5,'WWW','1320','20170726' union all
select 6,'EEE','1320','20170725' union all
select 7,'RRR','1450','20170724' union all
select 8,'TTT','1350','20170723' 
select * from #DAT
if col_length('tempdb..#USER','AKA_Code') IS NULL
alter table #USER add AKA_Code varchar(10)
update u set u.AKA_Code=u.aka from (
   SELECT *,min(code)over(partition by id) as aka FROM #USER 
) as u 
select * from #user
update d set d.UserCode=u.AKA_Code
from #DAT as d inner join #user as u on d.UserCode=u.code
where d.UserCode!=u.AKA_Code
select * from #DAT
UserCode CreatedDate 2017-07-30 00:00:00:000 2017-07-29 00:00:00:000 2017-07-28 00:00:00:000 2017-07-27 00:00:00:000 2017-07-26 00:00:00:000 2017-07-25 00:00:00:000 2017-07-24 00:00:00:000 2017-07-23 00:00:00:000 u_name CreatedDate AKA_Code A_111 2017-07-31 00:00:00:000 A_111 2017-07-30 00:00:00:000 A_111 2017-07-18 00:00:00:000 A_222 2017-07-18 00:00:00:000 A_333 2017-07-18 00:00:00:000 A_333 2017-07-19 00:00:00:000 UserCode CreatedDate 2017-07-30 00:00:00:000 2017-07-29 00:00:00:000 2017-07-28 00:00:00:000 2017-07-27 00:00:00:000 2017-07-26 00:00:00:000 2017-07-25 00:00:00:000 2017-07-24 00:00:00:000
 
推荐文章
挂过科的葡萄  ·  使用MERGE INTO将插入更新和删除操作合并为单条语句-云原生大数据计算服务 MaxCompute-阿里云
1 月前
爱看球的杨桃  ·  使用 FOR JSON 將查詢結果格式化為 JSON - SQL Server | Microsoft Learn
3 周前
精明的白开水  ·  MySQL插入循环存储过程问题:最后一行重复插入如何解决?
4 天前
沉稳的油条  ·  MySQL数据库精选(从入门使用到底层结构) - 不吃紫菜
4 天前
不拘小节的排球  ·  GitHub - yfzhang114/Generalization-Causality: 关于domain generalization,domain adaptation,causality,ro
10 月前
安静的海龟  ·  python将字符串中英文单双引号改为中文单双引号 - WebLinuxStudy - 博客园
1 年前
愤怒的毛巾  ·  倒卖精灵奴隶,但是哥布林巢穴(重生开始写网文)最新章节在线阅读-起点中文网官方正版
1 年前
帅气的木耳  ·  Groovy之常用字符串操作_groovy split-CSDN博客
1 年前
年轻有为的双杠  ·  sql server用变量动态命名临时表表名_sqlserver 动态表名-CSDN博客
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号