2014-01-08 39 views
-1

我有兩個結構相同的表,它們有一個鍵,一個時間戳,一個值和一個外鍵。比較Postgres中的兩個表

我想列出第二個表中沒有匹配記錄的所有記錄,第一個記錄中有相同的時間戳,值和外鍵?

我該怎麼辦?使用「在」

select a.key, 
     a.ts, 
     a.value 
from a 
where not exists (select 1 
        from b 
        where a.key = b.key 
        and (a.ts != b.ts 
         or a.value != b.value 
         or a.fk != b.fk)) 
; 

而且:

select a.key, 
     a.ts, 
     a.value 
from a 
where (a.key, a.ts, a.value) not in (select b.key, b.ts, b.value from b) 
; 

編輯:你可以嘗試

+0

答案取決於**精確表定義**,您必須包含這樣的問題。在'psql'中使用'\ d tbl'。可能的NULL值必須被考慮。另外,請提供您的Postgres版本。 –

回答

0

兩種方法,首先用「存在」我意識到你有四列,並有可能匹配在關鍵。我修改了「exists」查詢以反映這一點 - 該查詢現在檢查表間關鍵字的匹配,然後檢查其他三列中是否有不同。