2014-03-27 52 views
0

希望你做得很好。我是SQL编码新手。我想编写一个查询来查找两个表之间的差异,并将更新或新数据写入第三个表。我的两个表具有相同的列名称。捕获更改的第三个表格有称为评论的额外列。我想根据行修改插入注释,无论它是新行还是更新行。编写SQL查询需要一些帮助

**TABLE1 (BACKUP)** 
KEY,FIRST_NAME,LAST_NAME,CITY 
1,RAM,KUMAR,INDIA 
2,TOM,MOODY,ENGLAND 
3,MOHAMMAD,HAFEEZ,PAKISTAN 
4,MONIKA,SAM,USA 
5,MIKE,PALEDINO,USA 

**TABLE2 (CURRENT)** 
KEY,FIRST_NAME,LAST_NAME,CITY 
1,RAM,KUMAR,USA 
2,TOM,MOODY,ENGLAND 
3,MOHAMMAD,HAFEEZ,PAKISTAN 
4,MONIKA,SAM,INDIA 
5,MIKE,PALEDINO,USA 
6,MAHELA,JAYA,SL 



**TABLE3 (DIFFERENCE FROM TABLE2 TO TABLE1)** 
KEY,FIRST_NAME,LAST_NAME,CITY,COMMENT 
1,RAM,KUMAR,USA,UPDATE 
4,MONIKA,SAM,INDIA,UPDATE 
6,MAHELA,JAYA,SL,INSERT 

其他人?我想更新我的意见列是否是一个新的插入或更新现有行

+0

select * from a - b; – danny117

回答

1

@ danny117是一般意义上的正确,虽然我认为使用减号更好

SELECT * FROM TABLE2 
MINUS 
SELECT * FROM TABLE1 

您可能还喜欢看在this documentation其解释更多关于减号,相交

+0

是的,但是在使用Table2 Minues Table 1到Table 3时,如何在Comment列写入内容?我想捕捉它是否是新行的更新。 – user3230433

+0

假设评论存在于另一个表让我们称它为table4,你可以做(​​SELECT * FROM TABLE2 MINUS SELECT * FROM TABLE1)LEFT OUTER JOIN TABLE4 ON TABLE2.KEY = TABLE4.KEY – Deepak

+0

不,它不存在于第4表。我从两个表之间的差异弥补它是新行插入还是更新到现有行。 – user3230433

0
INSERT INTO TABLE3 
SELECT KEY,FIRST_NAME,LAST_NAME,CITY,NULL AS COMMENTS FROM TABLE2 
MINUS 
SELECT KEY,FIRST_NAME,LAST_NAME,CITY,NULL AS COMMENTS FROM TABLE1; 


UPDATE TABLE3 
SET COMMENTS = 
CASE 
WHEN 1=(SELECT 1 FROM TABLE1 WHERE TABLE1.KEY=TABLE3.KEY) THEN 'UPDATED' 
ELSE 'INSERTED' 
END