2015-10-22 16 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);