데이터 베이스 MySQL 튜토리얼 SQLserver使用映射表进行数据相关操作_MySQL

SQLserver使用映射表进行数据相关操作_MySQL

May 30, 2016 pm 05:09 PM
데이터

基本需求:

     老数据有老数据的顺序编码规则,新数据有新数据的顺序编码规则,但是老数据的编码还是要更新相应的东西,新数据也得实时更新,在新数据中已经用新编码规则对老数据对进行编码,在上报表中既要新增新数据,也要更新老数据与现有数据。

-------------------------------------------------

--Author:Oliver QIN

--Date:2015-11-07

--DESC:使用映射表对老数据进行更新

-------------------------------------------------

--存储老数据的表

--drop table TB_old

CREATE TABLE TB_old(Id INT,IdSeq VARCHAR(20),Name VARCHAR(200),Adress varchar(200),Age int)

--------------------------------------------------------------------

--插入测试数据(2014年的人员信息表)  

---目前的编号是以省份来编号的,例如下面插入的测试数据

 

 

/*************************老的人力资源管理系统中******************************/

 

INSERT INTO TB_old  SELECT 1,'yunnan01','JACK','云南昆明',45  union all

                    SELECT 2,'yunnan02','Tom','云南曲靖',82   union all

                    SELECT 3,'yunnan03','Alice','云南丽江',60 union all

                    SELECT 4,'yunnan04','Jerry','云南昭通',26 union all

                    SELECT 5,'chongqin05','Terry','重庆江北',22

                     

---随着时间的变迁,需要把编号进行修改,统一为China开头的编号,例如:China01

 

--那接着就建立映射表

/*********************************映射表***************************************/

--drop table Mapping

CREATE TABLE Mapping (Old_IdSeq varchar(100),New_IdSeq varchar(100))

--插入映射关系

 

insert into Mapping  select 'yunnan01','China01' union all

                     select 'yunnan02','China02' union all

                     select 'yunnan03','China03' union all

                     select 'yunnan04','China04' union all

                     select 'chongqin05','China05' 

                     

---这是2015年在新人力资源管理系统中新生成的一张信息表 注明:在老系统中已经生成的编号不可以替换成现有编号,需要延用至退休                   

--drop table TB_New 注:新的人力资源表中JACK的年龄更新为99,并且新加了JOSN的相关信息

CREATE TABLE TB_New(Id INT,IdSeq VARCHAR(20),Name VARCHAR(200),Adress varchar(200),Age int)

 

--插入新的测试数据

 /*************************新的人力资源管理系统中******************************/

 

 INSERT INTO TB_New SELECT 1,'China01','JACK','云南昆明',99  union all

                     SELECT 2,'China02','Tom','云南曲靖',82   union all

                     SELECT 3,'China03','Alice','云南丽江',60 union all

                     SELECT 4,'China04','Jerry','云南昭通',26 union all

                     SELECT 5,'China05','Terry','重庆江北',22 union all

                     SELECT 6,'China06','JOSN','广东深圳',25

-------------现在有如下需求

/*********************************************************

   随着时间的推移,需要实时的更新他们的相关信息,假设录入该年龄的时间是2014年

   2015年系统进行升级,录入的相关信息则按新的规则命名编号,如果年龄大于45岁则不更新相关信息,视为退休

   新的系统中已经把老的信息按照新的编码规则进行编码,但是这些信息需要用来上报给总经理查看。

  

*/ 

 

/**************************上报数据库中的信息*******************************************/

 

/*上报库中的信息是以前老的系统中的数据*/

--drop table Report_Rpt 

 

CREATE TABLE Report_Rpt(Id INT,IdSeq VARCHAR(20),Name VARCHAR(200),Adress varchar(200),Age int)

 

INSERT INTO Report_Rpt select * from TB_old

/**************************************************************************************

     要求:使用新的人力资源管理系统中提供的数据对更新上报信息中的年龄

*/

--建立映射视图,用于关联更新

go

--select * from Differrence_Data

CREATE VIEW Differrence_Data

as

select A.Age,B.Old_IdSeq from TB_New A 

 left join  Mapping B ON  A.IdSeq=B.New_IdSeq  

 left join TB_old C ON  C.IdSeq=B.Old_IdSeq

 WHERE A.AgeC.Age

 ---------------------------------------------------------

 

GO

--DROP PROC Get_NewInfo 

CREATE  PROC Get_NewInfo

 AS

 BEGIN   

 -------------------------------------------------------情况一:更新老编码对应的年龄信息

     if((select COUNT(*) from Differrence_Data)>0)

    -------------------------如果在视图Differrence_Data中存在数据,那么更新相应的老编码信息

     UPDATE Report_Rpt SET Age=A.Age FROM Differrence_Data A WHERE A.Old_IdSeq=Report_Rpt.IdSeq

     

     IF (  (select COUNT(1) from TB_New where IdSeq not in 

              (SELECT New_IdSeq  FROM Mapping 

               union all

               select IdSeq FROM Report_Rpt

              )

            ) >0

         )

         -------------------------------------------------情况二:将新增的数据插入到上报表中

         ---插入新增的数据到上报信息表中 

         insert into Report_Rpt  

         select * from TB_New A WHERE A.IdSeq NOT IN (SELECT New_IdSeq FROM Mapping

                                                   UNION all

                                                  select IdSeq FROM Report_Rpt)

        

          ------------------------------------------------情况三:更新新编码对应的年龄信息

          IF   (

                  (SELECT COUNT(1) FROM  TB_New WHERE 

                         IdSeq not in 

                        (select New_IdSeq from Mapping)

                         AND IdSeq IN 

                        (SELECT IdSeq FROM Report_Rpt)

                   )>0

                )

            --------------------更新新增加数据年龄变更的信息

            UPDATE Report_Rpt SET Age=A.Age FROM  TB_New A WHERE 

                    A.IdSeq not in 

                    (select New_IdSeq from Mapping) 

                    AND A.IdSeq IN 

                    (SELECT IdSeq FROM Report_Rpt) 

                    AND A.IdSeq = Report_Rpt.IdSeq  

                                                              

 END

 

 --执行存储过程

 EXEC Get_NewInfo

 

 

 

 --老人力资源表

 select * from TB_old

 --新人力资源表

 select * from TB_New

 --映射表

 select * from Mapping

 --上报表

 select * from Report_Rpt

 --------------------------------------------

 --删除表语句

 --DROP TABLE TB_old,TB_New,Mapping,Report_Rpt

 

 --------------------------------以下是测试老编码年龄变化跟新编码年龄变化还有新增新的人员信息时,是否也会更新跟插入相应的数据

 

--------------------------------------改变新人力资源系统中的数据进行逻辑测试

insert into TB_New SELECT 7,'China07','测试01','云南昆明',21  union all

                   SELECT 8,'China08','测试02','云南昆明',33

 ---------------修改新数据进行测试  

update TB_New set Age='100' where Id='6'

 ---------------修改老数据的年龄进行测试

update TB_New set Age='100' where Id='1'

 

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

ddrescue를 사용하여 Linux에서 데이터 복구 ddrescue를 사용하여 Linux에서 데이터 복구 Mar 20, 2024 pm 01:37 PM

ddrescue를 사용하여 Linux에서 데이터 복구

오픈 소스! ZoeDepth를 넘어! DepthFM: 빠르고 정확한 단안 깊이 추정! 오픈 소스! ZoeDepth를 넘어! DepthFM: 빠르고 정확한 단안 깊이 추정! Apr 03, 2024 pm 12:04 PM

오픈 소스! ZoeDepth를 넘어! DepthFM: 빠르고 정확한 단안 깊이 추정!

여러 조건으로 Excel 필터 기능을 사용하는 방법 여러 조건으로 Excel 필터 기능을 사용하는 방법 Feb 26, 2024 am 10:19 AM

여러 조건으로 Excel 필터 기능을 사용하는 방법

초지능의 생명력이 깨어난다! 하지만 자동 업데이트 AI가 등장하면서 엄마들은 더 이상 데이터 병목 현상을 걱정할 필요가 없습니다. 초지능의 생명력이 깨어난다! 하지만 자동 업데이트 AI가 등장하면서 엄마들은 더 이상 데이터 병목 현상을 걱정할 필요가 없습니다. Apr 29, 2024 pm 06:55 PM

초지능의 생명력이 깨어난다! 하지만 자동 업데이트 AI가 등장하면서 엄마들은 더 이상 데이터 병목 현상을 걱정할 필요가 없습니다.

Google은 열광하고 있습니다. JAX 성능이 Pytorch와 TensorFlow를 능가합니다! GPU 추론 훈련을 위한 가장 빠른 선택이 될 수 있습니다. Google은 열광하고 있습니다. JAX 성능이 Pytorch와 TensorFlow를 능가합니다! GPU 추론 훈련을 위한 가장 빠른 선택이 될 수 있습니다. Apr 01, 2024 pm 07:46 PM

Google은 열광하고 있습니다. JAX 성능이 Pytorch와 TensorFlow를 능가합니다! GPU 추론 훈련을 위한 가장 빠른 선택이 될 수 있습니다.

iPhone의 느린 셀룰러 데이터 인터넷 속도: 수정 사항 iPhone의 느린 셀룰러 데이터 인터넷 속도: 수정 사항 May 03, 2024 pm 09:01 PM

iPhone의 느린 셀룰러 데이터 인터넷 속도: 수정 사항

미 공군이 주목할만한 최초의 AI 전투기를 선보였습니다! 전 과정에 걸쳐 장관이 직접 간섭 없이 테스트를 진행했고, 10만 줄의 코드를 21차례 테스트했다. 미 공군이 주목할만한 최초의 AI 전투기를 선보였습니다! 전 과정에 걸쳐 장관이 직접 간섭 없이 테스트를 진행했고, 10만 줄의 코드를 21차례 테스트했다. May 07, 2024 pm 05:00 PM

미 공군이 주목할만한 최초의 AI 전투기를 선보였습니다! 전 과정에 걸쳐 장관이 직접 간섭 없이 테스트를 진행했고, 10만 줄의 코드를 21차례 테스트했다.

다섯 개의 유연한 손가락과 초인적인 속도를 갖춘 인간 작업을 자율적으로 완료하는 최초의 로봇 등장, 가상 공간 훈련을 지원하는 대형 모델 다섯 개의 유연한 손가락과 초인적인 속도를 갖춘 인간 작업을 자율적으로 완료하는 최초의 로봇 등장, 가상 공간 훈련을 지원하는 대형 모델 Mar 11, 2024 pm 12:10 PM

다섯 개의 유연한 손가락과 초인적인 속도를 갖춘 인간 작업을 자율적으로 완료하는 최초의 로봇 등장, 가상 공간 훈련을 지원하는 대형 모델

See all articles