我想要做的是从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;
我是否应该将这两个表连在一起,在执行此语句后确定差异,从什么返回?
我曾尝试研究实现此方法的方法,但没有找到关于该主题的任何内容
答案 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;