如何一次更新单个列中的两个值

时间:2017-06-29 10:11:42

标签: sql oracle

有一张桌子

STOCK_ITEM (id number (2), 
            item varchar2 (20), 
            purchase_date date, 
            quantity number (2))

有笔记本电脑,桌面电话,手机,电视及其描述等项目清单。

我们必须编写一个更新查询,将笔记本电脑更新到桌面和桌面到笔记本电脑。

我怎样才能实现这个目标?

以下是样本数据:

insert into stock_item values (1,'laptop','01/17',4);
insert into stock_item values (2,'desktop','02/17',3);
insert into stock_item values (3,'laptop','03/17',2);
insert into stock_item values (4,'tv','11/17',6);
insert into stock_item values (5,'fridge','07/17',5);
insert into stock_item values (6,'desktop','05/17',9);

2 个答案:

答案 0 :(得分:3)

使用解码值进行1次更新:

update STOCK_ITEM set ITEM=decode(ITEM,'laptop', 'desktop','desktop', 'laptop', ITEM);

更新笔记本电脑后的记录将被替换为桌面而相反。

答案 1 :(得分:3)

我会写更新语句,如:

update stock_item
set item = case lower(item)
                when 'laptop' then 'desktop'
                when 'desktop' then 'laptop'
           end
where lower(item) in ('laptop', 'desktop');

这样,您只需要更新需要更改的行,并且case表达式在意图上比解码更清晰,使其更易于阅读和维护。

我使用了较低的功能来确保所有笔记本电脑或台式机(无论是LAPTOP,LaPtOp,笔记本电脑等)都会更新。