用Oracle替换列中的值

时间:2014-08-10 14:55:26

标签: sql oracle

如何在一个订单中更改单个列的所有值? 例如,我想更改新列的最后一个列工资(2250,1,3500,1)的旧值(2352,7512,4253,1142)。我有这个数据库:

enter image description here

我知道怎么做但是一步一步地改变,如果我有很多行,它就没有效率。这样:

UPDATE TABLE tablename
   SET salary = REPLACE(tablename.salary, 2250, 2352);

然后多次执行该操作。

2 个答案:

答案 0 :(得分:3)

UPDATE TABLE tablename
SET salary = 2250
WHERE salary = 2352

我不确定您使用REPLACE()函数的目标是什么,但如果您想更改值,则需要像上面的代码一样进行。将薪水设置为您想要的薪水2250。

您可以使用不同的标准写几次,然后运行它。

编辑:由于您担心多次这样做,您可以创建一个名为薪水的表:

CREATE TABLE t_salary AS 
SELECT salary from tablename;

ALTER t_salary add newsalary integer after salary;

在' newsalary'你可以添加新薪水,然后进行内部联接。我刚刚为此创建了一个名为stackoverflow的表(这将是你的' tablename'

update stackoverflow s
inner join t_salary ns on s.salary = ns.salary
set s.salary = ns.newsalary;

现在这样做是将tablename连接到t_salary,其中当前薪水= t_salary中的薪水。然后你将tablename.salary设置为等于新工资,这对我有用,我希望它适合你。

请注意,语法可能略有不同,因为我没有在家用机器上安装Oracle,我使用的是MySQL。

答案 1 :(得分:0)

由于您已经列出旧工资值及其相应的新工资值,您可以将它们放在一个平面文件中,并在oracle中创建一个外部表来指向该文件。

完成后,您只需触发一个类似于下面给出的简单更新语句:

update test1 set salary = ( select newsalary from test2 where test1.empid = test2.empid);