如何以干净的方式比较表之间的布尔值以进行更新

How to compare boolean values between tables for update in a clean way

在此fiddle中:https://rextester.com/edit/SPVQGW21946

我想用 tableB 更新 tableA -- 第一行的值,字段 cccnullfalse

这是一个 upsert 查询,需要一种方法来比较 tableB 是否具有不同的值,然后以简单的方式更新这些字段。

我卡在 where 子句上,我不确定如何将 boolean 字段与 update:

进行比较
INSERT INTO tableA (company, option, new, gap, ccc) 
   SELECT company, option, new, gap, ccc
   FROM   tableB
 ON CONFLICT (company, option) 
 DO update
   set new= EXCLUDED.new,
   gap = excluded.gap,
   ccc = excluded.ccc

 WHERE 
      ?

是否有一种干净的方法来比较要更新的布尔值?

(我有insert的原因是因为tableB可能有新行。)

我想你想在 where 子句中使用 IS DISTINCT FROM

 WHERE (tableA.new,tableA.gap,tableA.ccc) 
IS DISTINCT FROM (EXCLUDED.new,excluded.gap,excluded.ccc);

Demo