id sal
101 5000
102 9000
我想要更新sal列,如
id sal
101 9000
102 5000
答案 0 :(得分:2)
UPDATE emp x
SET sal =
(SELECT sal
FROM emp
WHERE id = DECODE (x.id, :id1, :id2, :id1) )
WHERE id IN ( :id1, :id2)
答案 1 :(得分:1)
假设从具有两列(id和sal,以及30,000行)的表中分配#34;编写一个查询,在id = 101和id = 102"之间交换工资,这样的事情应该有效:
update zz set sal = case id when 101 then (select sal from zz where id = 102)
when 102 then (select sal from zz where id = 101)
end
where id in (101, 102);
编辑:正如Mottor在他对这个问题的回答中所表明的那样,该陈述可以更简洁地写成,如下所示。 (请注意,我更喜欢在DECODE上使用CASE表达式 - 我认为它更易于阅读和维护。)
update zz x set sal = (select sal from zz where id = case x.id when 101 then 102
when 102 then 101 end)
where id in (101, 102);