比较Postgres中的两个表

时间:2014-01-08 16:31:20

标签: sql postgresql

我有两个结构相同的表,它们有一个键,一个时间戳,一个值和一个外键。

我想列出第二个表中没有匹配记录的所有记录,并且时间戳,值和外键相同?

我该怎么做?

1 个答案:

答案 0 :(得分:0)

您可以尝试两种方法,首先使用“存在”:

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))
;

使用“in”:

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)
;

编辑:我意识到你有四列,很可能在键上匹配。我修改了“exists”查询以反映这一点 - 该查询现在检查表之间的键的匹配,然后检查其他三列中的任何一列是否不同。