2014-03-27 51 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