使用EXCEPT和标记列差异

时间:2018-03-13 17:14:21

标签: postgresql except

我想要做的是从postgres表中选择数据,这些数据不会出现在另一个表格中。两个表都有相同的列,禁止使用boolean over Varchar(1),但问题是这些列中的数据不匹配。

我知道我可以使用SELECT EXCEPT SELECT语句执行此操作,我已经实现并且正在使用它。

我想要做的是找到一个方法来标记不匹配的列。作为一个想法,我曾想过在不匹配的字段中将数字附加到数据的末尾。

例如,如果一个表中的updateflag与另一个表的不同,我将返回' * f'而不是' f'

SELECT id, number, "updateflag" from dbc.person
EXCEPT
SELECT id, number, "updateflag":bool from dbg.person;

我是否应该将这两个表连在一起,在执行此语句后确定差异,从什么返回?

我曾尝试研究实现此方法的方法,但没有找到关于该主题的任何内容

1 个答案:

答案 0 :(得分:0)

我更喜欢这个

的完整外连接
select *
from dbc.person p1
  full join dbg.person p2 on p1.id = p2.id
where p1 is distinct from p2;

假设id列是将两个表“链接”在一起的主键列。

这将只返回至少有一列不同的行。

如果您想查看差异,可以使用hstore功能

select hstore(p1) - hstore(p2) as columns_diff_p1, 
       hstore(p2) - hstore(p1) as columns_diff_p2
from dbc.person p1
  full join dbg.person p2 on p1.id = p2.id
where p1 is distinct from p2;