更新两个值,第二个值具有 where 子句

Posted

技术标签:

【中文标题】更新两个值,第二个值具有 where 子句【英文标题】:Updating two values, with a second value having a where clause 【发布时间】:2020-07-16 10:42:12 【问题描述】:

这可能毫无意义,但我希望在 Eligible 等于 1 时仅在 ONE 查询中查询第二个值,但始终更新第一个值。因此,如果资格已经是 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

【问题讨论】:

你正在使用哪个数据库??? 请提供样本数据和期望的结果。 Orcale @scaisEdge @Branderson20 。 . .您的查询似乎引用了 两个 表。 @Branderson20 ,仅供我理解。您想在第一行中仅将符合条件的字段更新为 0,因此一旦更新,接下来的字段应该保持旧值吗?订购标准是什么?对于 ID 字段?? 【参考方案1】:

在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
                );

【讨论】:

【参考方案2】:

您不能有时设置多个列值,但不能在其他情况下设置,在单个语句中,列始终相同。但是,您可以有条件地将列的值设置为现有值或更改该值。

  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 ;

这可能在没有循环的单个语句中是可行的。但是您没有发布循环控制,所以我无法进一步查看。

【讨论】:

以上是关于更新两个值,第二个值具有 where 子句的主要内容,如果未能解决你的问题,请参考以下文章

MySQL - WHERE 子句中的 NOT IN 查询具有相同的结构,适用于第一个表但不适用于第二个表

使用JPA在Sql中具有不同值的多个语句where子句

PostgreSQL unnest,嵌套字段特定元素的 WHERE 子句

在WHERE子句中添加第二个条件?

如何使用在 where 子句中具有父属性的休眠查询更新数据

SQL Selects combine - 第二个选择在 Where 子句中