簡體   English   中英

oracle找到2個表之間的差異

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM