2016-11-04 14 views
-1

我有一個場景,我想在兩個postgres表格之間找到增量。假設有表A和表B,我想查找表A中新添加的記錄,那麼我需要在表A中找到更新的記錄,然後查找表A中相對於表B刪除的記錄。Postgres DB中兩個表格之間的變化/ Deltas

什麼是最好的辦法,因爲我需要稍後處理那些基於更新/刪除/插入標誌。

+0

那些表具有共同的唯一列嗎? –

+0

是的兩個表都是相同的。 – AB90

回答

0

你可以做一個完全外部聯接:

select id, 
     case 
     when s.id is null then 'Deleted in source table' 
     when t.id is null then 'Added in source table' 
     else 'Data Changed' 
     end as status 
from source s 
    full outer join target t using (id) 
where s is distinct from t; 

這假定兩個表唯一列名爲id

where s is distinct from t將比較兩個表中的所有列,因此會過濾出兩者中存在且相同的所有行。所以結果是在一個表中缺少的行或者具有不同的值。

在線示例:http://rextester.com/LKY13449

+0

我也想要一個標誌來檢查哪些是新添加的行,哪些是更新的或哪些從表A中刪除。 – AB90

+0

@AbhijeetSahai:這是'status'列。我改變例子來使用你的話 –

+0

感謝您的迴應。這是工作。在我的表中,所有的字段都是相同的,通過運行這個查詢我們得到了結果集中的重複列。任何方式刪除這些並獲得像表A一樣的列結構,因爲兩個表都是相同的。我對錶B數據不感興趣。我只想得到表格A的數據。 – AB90

相關問題