[英]oracle find difference between 2 tables
我有2個相同結構的表。 一個是臨時的,另一個是刺激的。 每次加載整個數據集,有時此數據集將從先前的數據集中刪除記錄。 我首先將數據集加載到臨時表中,如果刪除了任何記錄,我也想從prod表中刪除它們。
那么如何才能找到prod中存在但不存在於temp中的記錄? 我試過外連接,但它似乎沒有工作。 它將從左側或右側的表中返回所有記錄,具體取決於執行左外連接或右外連接。
然后我還想刪除prod表中的那些記錄。
一種方法是使用MINUS
運算符
SELECT * FROM table1
MINUS
SELECT * FROM table2
將顯示所有行table1
沒有確切匹配table2
(你可以明顯地指定一個較小的列的列表,如果你只確定兩個表中是否存在特定的鍵興趣)。
另一個是使用NOT EXISTS
SELECT *
FROM table1 t1
WHERE NOT EXISTS( SELECT 1
FROM table2 t2
WHERE t1.some_key = t2.some_key )
怎么樣的:
SELECT * FROM ProdTable WHERE ID NOT IN
(select ID from TempTable);
它的工作方式與DELETE
語句相同:
DELETE FROM ProdTable WHERE ID NOT IN
(select ID from TempTable);
MINUS可以在這里工作以下語句將結果與MINUS運算符組合在一起,后者僅返回第一個查詢返回的行,但不返回第二個查詢返回的行:
SELECT * FROM prod
MINUS
SELECT * FROM temp;
減號僅在表結構相同時才有效
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.