sql—更新两个值,第二个值包含where子句

ozxc1zmp  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(238)

这可能毫无意义,但我希望在一个查询中,当合格值等于1时,只使用第二个值,但始终更新第一个值。因此,如果符合条件的已为0(或其他内容),则不更新符合条件的。我能在一个查询中完成吗?

---Looping through this
  UPDATE myTable p
   SET p.first= 'C', p.eligible = 0
   WHERE id = l_modifier_row_a.id

期望的结果
之前

ID First Eligible
1    A     1
2    B     2

之后

ID First Eligible
 1    C     0
 2    C     2
bejyjqdl

bejyjqdl1#

在oracle中,可以使用 exists :

UPDATE myTable p
   SET p.first = 'C',
       p.eligible = 0
   WHERE EXISTS (SELECT 1
                 FROM l_modifier_row_a l
                 WHERE p.id = l.id AND p.person_id = l.person_id
                );
cbeh67ev

cbeh67ev2#

有时不能设置多个列值,但在其他语句中则不能,因为在一条语句中,列总是相同的。但是,可以有条件地将列的值设置为现有值或更改该值。

update mytable p
   set first= 'C'
     , eligible = case when p.eligible = 1 
                         then 0
                         else p.eligible
                    end                
   where id = l_modifier_row_a.id ;

这在没有循环的单个语句中可能是可行的。但是你没有发布循环控制,所以我不能看得更远。

相关问题