A,B两表结构一样,A表和B表比较,如果有数据不一样,则把不一样的数据保存到C表。如:
A表数据
6,Mixed,Nuts,Z
B表数据
6,Mixed,Nuts,C
要把两条数据都保存到C表,并且要标记出哪条数据是哪个表的,如:
source type user_id first_name last_name grade
A表 3 6 Mixed Nuts Z
B表 3 6 Mixed Nuts C
source 字段的意思是:数据来源哪个表
type 字段的意思是:
如果A表有的数据B表没有,则type=1。
如果B表有的数据A表没有,则type=2。
如果A表有的数据B表也有,只是有些字段的值不一样,则type=3。
按照下列数据,最后C表的结果应该是:
source type user_id first_name last_name grade
A表 3 6 Mixed Nuts Z
B表 3 6 Mixed Nuts C
B表 2 11 Jack Fancy A
A,B表结构:
create table A(
user_id integer notnull,
first_name varchar(20),
last_name varchar(20),
grade varchar(20),
constraint A_pkey primary key(user_id)
)
C表结构:
create table C(
source varchar(20) notnull,
type integer notnull,
user_id integer notnull,
first_name varchar(20),
last_name varchar(20),
grade varchar(20)
)
insert into A(user_id,first_name,last_name,grade)values(1,'Some','Dude','A')
insert into A(user_id,first_name,last_name,grade)values(2,'Other','Guy','B')
insert into A(user_id,first_name,last_name,grade)values(3,'You are','Welcome','B')
insert into A(user_id,first_name,last_name,grade)values(4,'What','Other','A')
insert into A(user_id,first_name,last_name,grade)values(5,'INeed','You','C')
insert into A(user_id,first_name,last_name,grade)values(6,'Mixed','Nuts','Z')
insert into A(user_id,first_name,last_name,grade)values(7,'Kirk','Land','B')
insert into A(user_id,first_name,last_name,grade)values(8,'Bit','Shooter,'A')
insert into B(user_id,first_name,last_name,grade)values(1,'Some','Dude','A')
insert into B(user_id,first_name,last_name,grade)values(2,'Other','Guy','B')
insert into B(user_id,first_name,last_name,grade)values(3,'You are','Welcome','B')
insert into B(user_id,first_name,last_name,grade)values(4,'What','Other','A')
insert into B(user_id,first_name,last_name,grade)values(5,'INeed','You','C')
insert into B(user_id,first_name,last_name,grade)values(6,'Mixed','Nuts','C')
insert into B(user_id,first_name,last_name,grade)values(7,'Kirk','Land','B')
insert into B(user_id,first_name,last_name,grade)values(8,'Bit','Shooter,'A')
insert into B(user_id,first_name,last_name,grade)values(11,'Jack','Fancy','B')
insertinto c select*from (
with t1 as (SELECT*FROM a MINUS SELECT*FROM b),
t2 as (SELECT*FROM b MINUS SELECT*FROM a)
select'A' source,3 type,t1.*from t1 whereexists (select1from t2 where t2.user_id=t1.user_id)
unionall
select'A' source,1 type,t1.*from t1 wherenotexists (select1from t2 where t2.user_id=t1.user_id)
unionall
select'A' source,3 type,t2.*from t2 whereexists (select1from t1 where t2.user_id=t1.user_id)
unionall
select'A' source,2 type,t2.*from t2 wherenotexists (select1from t1 where t2.user_id=t1.user_id));
解决方法:
本文介绍如何通过SQL查询比较两个表的数据,找出不同之处,并将这些差异性数据整合到第三个表中,同时标记数据来源及差异类型。
323

被折叠的 条评论
为什么被折叠?



