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

问题描述 投票:0回答:1

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

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

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可能有新行。)

postgresql boolean postgresql-10
1个回答
1
投票

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

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

Demo

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.