【问题标题】:Updating two values, with a second value having a where clause更新两个值,第二个值具有 where 子句
【发布时间】: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 字段??

标签: sql oracle sql-update


【解决方案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 ;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-04
      • 1970-01-01
      • 2019-11-06
      • 1970-01-01
      • 1970-01-01
      • 2022-09-27
      • 2015-09-13
      • 1970-01-01
      相关资源
      最近更新 更多