更新两个值,第二个值具有 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 查询具有相同的结构,适用于第一个表但不适用于第二个表