【问题标题】:Using EXCEPT and flagging column differences使用 EXCEPT 并标记列差异
【发布时间】:2018-03-13 17:14:21
【问题描述】:

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

我知道我可以使用 SELECT EXCEPT SELECT 语句来做到这一点,我已经实现并且正在工作。

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

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

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

我是否应该将两个表连接在一起,然后执行此语句以从返回的内容中识别差异?

我试图研究实现这一点的方法,但没有找到任何关于该主题的内容

【问题讨论】:

    标签: postgresql except


    【解决方案1】:

    我更喜欢完全外连接

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 2019-06-07
      • 2011-10-30
      • 1970-01-01
      • 2017-11-14
      相关资源
      最近更新 更多