34,588
社区成员
发帖
与我相关
我的任务
分享
表A数据: (ID是uniqueidentifier类型数据)
ID Name Sex
xxx 张三 男
yyy 李四 男
表B数据: (ID中无数据,为空)
ID Name Sex
张三 男
李四 男
张三 女
王五 女
create table A(ID uniqueidentifier, Name nvarchar(16), Sex nvarchar(2))
insert A select newid(),'张三','男'
insert A select newid(),'李四','男'
go
create table B(ID uniqueidentifier, Name nvarchar(16), Sex nvarchar(2), Born nvarchar(32))
insert B select null,'张三','男','beijing'
insert B select null,'李四','男','beijing'
insert B select null,'张三','女','beijing'
insert B select null,'王五','女','beijing'
insert B select null,'王五','女','tianjing'
--select * from A
--select * from B
--添加B中有,A中没有的数据
insert A select ID=newid(),Name,Sex
from (select distinct Name,Sex from B) B
where not exists(select 1 from A T where Name=B.Name and Sex=B.Sex)
--更新B表
update B
set B.ID=A.ID
from B join A on B.Name=A.Name and B.Sex=A.Sex
select * from A
select * from B
drop table A
drop table B
/* result
ID Name Sex
------------------------------------ ---------------- ----
6190DF05-4016-4383-B6F4-F5A6F7974C5B 张三 男
AA6712E4-074F-478C-9DB0-CF9FDD6E3A86 李四 男
8FC74438-B600-4706-A2D1-B521F3CC691B 王五 女
F25B2C0E-A94D-4A57-A465-B0DDFFDF5D60 张三 女
(4 row(s) affected)
ID Name Sex Born
------------------------------------ ---------------- ---- --------------------------------
6190DF05-4016-4383-B6F4-F5A6F7974C5B 张三 男 beijing
AA6712E4-074F-478C-9DB0-CF9FDD6E3A86 李四 男 beijing
F25B2C0E-A94D-4A57-A465-B0DDFFDF5D60 张三 女 beijing
8FC74438-B600-4706-A2D1-B521F3CC691B 王五 女 beijing
8FC74438-B600-4706-A2D1-B521F3CC691B 王五 女 tianjing
(5 row(s) affected)
*/
insert ta(id,name,sex,born) select b.nid,a.name,a.sex,a.born from tb a inner join(select newid() nid,name,sex from tb b where not exists
(select 1 from ta where checksum(name,sex)=checksum(b.name,b.sex))
group by name,sex) b on a.name=b.name and a.sex=b.sex
create table A(ID uniqueidentifier, Name nvarchar(16), Sex nvarchar(2))
insert A select newid(),'张三','男'
insert A select newid(),'李四','男'
go
create table B(ID uniqueidentifier, Name nvarchar(16), Sex nvarchar(2), Born nvarchar(32))
insert B select null,'张三','男','beijing'
insert B select null,'李四','男','beijing'
insert B select null,'张三','女','beijing'
insert B select null,'王五','女','beijing'
insert B select null,'王五','女','tianjing'
--select * from A
--select * from B
--添加B中有,A中没有的数据
insert A select ID=newid(),Name,Sex from B where not exists(select 1 from A T where Name=B.Name and Sex=B.Sex)
--删除A中姓名、性别相同的
delete A where exists(select 1 from A T where Name=A.Name and Sex=A.Sex and ID>A.ID)
--更新B表
update B
set B.ID=A.ID
from B join A on B.Name=A.Name and B.Sex=A.Sex
select * from A
select * from B
drop table A
drop table B
/* result
ID Name Sex
------------------------------------ ---------------- ----
BBAE6A64-5623-4055-B5FD-430C075DF5BA 张三 男
19DAD956-A758-49B2-AFF1-B119C88CA3D4 李四 男
D786EC13-0B05-49AC-A650-D35F6F082234 张三 女
789AABB4-A8A7-4DCE-9786-EF9CD96C6736 王五 女
(4 row(s) affected)
ID Name Sex Born
------------------------------------ ---------------- ---- --------------------------------
BBAE6A64-5623-4055-B5FD-430C075DF5BA 张三 男 beijing
19DAD956-A758-49B2-AFF1-B119C88CA3D4 李四 男 beijing
D786EC13-0B05-49AC-A650-D35F6F082234 张三 女 beijing
789AABB4-A8A7-4DCE-9786-EF9CD96C6736 王五 女 beijing
789AABB4-A8A7-4DCE-9786-EF9CD96C6736 王五 女 tianjing
(5 row(s) affected)
*/
insert ta(id,name,sex,born) select newid(),a.name,a.sex,a.born from tb a inner join(select name,sex from tb b where not exists
(select 1 from ta where checksum(name,sex)=checksum(b.name,b.sex))
group by name,sex) b on a.name=b.name and a.sex=b.sex
insert ta(id,name,sex) select newid(),name,sex,born from tb b where not exists
(select 1 from ta where checksum(name,sex)=checksum(b.name,b.sex))
group by name,sex,??? --born不能加入group by,否则ID又不同了
update b set id=a.id
from tb b
inner join ta a
on a.name=b.name and a.sex=b.sex
insert a
select * from b
except
select * from a
update b
set id=a.id
from a,b where a.name=b.name and a.sex=b.sex
insert ta(id,name,sex) select newid(),name,sex from tb b where not exists
(select 1 from ta where checksum(name,sex)=checksum(b.name,b.sex))
group by name,sex
update b set id=a.id
from tb b
inner join ta a
on a.name=b.name and a.sex=b.sex