2015-10-22 11 views
0

我想创建一个比较两个数据集的差异的脚本。我发现除了功能出奇的好和彻底。在脚本下面,结果几乎是我最终想要的。我也想知道差异的确切位置。在下面的脚本中,我希望它能够返回任何人能够理解的与id相关的内容......列的值......不同。最终使用的数据将具有大量的行和列。只要知道哪些行是不同的就是一个好的开始。但能够指出除外声明的确切原因会更好。除了postgres中的功能;返回行和列来知道确切的不同值

DROP TABLE if exists werk.empdtl1; 
create table werk.empdtl1(empid int,empname varchar(30)); 

insert into werk.empdtl1 values(1,'one'); 
insert into werk.empdtl1 values(2,'two'); 
insert into werk.empdtl1 values(3,'three'); 
insert into werk.empdtl1 values(4,'four'); 
insert into werk.empdtl1 values(5,'five'); 

DROP TABLE if exists werk.empdtl2; 
create table werk.empdtl2(empid int,empname varchar(30)); 
insert into werk.empdtl2 values(1,'one'); 
insert into werk.empdtl2 values(2,'two'); 
insert into werk.empdtl2 values(3,'three'); 
insert into werk.empdtl2 values(4,'four'); 
insert into werk.empdtl2 values(6,'six'); 
insert into werk.empdtl2 values(5,'six'); 

TABLE werk.empdtl2 EXCEPT TABLE werk.empdtl1 
UNION ALL 
(TABLE werk.empdtl1 EXCEPT TABLE werk.empdtl2) ; 

回答

0

你的意思是这样的吗?

SELECT n1.empid AS n1_id,n2.empid AS n2_id 
FROM empdtl1 n1 FULL JOIN empdtl2 n2 USING(empid) 
WHERE n1.empid IS NULL OR 
n2.empid IS NULL 
OR (n1.empid=n2.empid AND n1.empname<>n2.empname);