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

时间:2019-03-05 06:28:02

标签: postgresql boolean postgresql-10

在这个小提琴中:https://rextester.com/edit/SPVQGW21946

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

enter image description here

这是一个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可能有新行。)

1 个答案:

答案 0 :(得分:1)

我认为您想在where子句中使用IS DISTINCT FROM

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

Demo