如何在一个订单中更改单个列的所有值? 例如,我想更改新列的最后一个列工资(2250,1,3500,1)的旧值(2352,7512,4253,1142)。我有这个数据库:
我知道怎么做但是一步一步地改变,如果我有很多行,它就没有效率。这样:
UPDATE TABLE tablename
SET salary = REPLACE(tablename.salary, 2250, 2352);
然后多次执行该操作。
答案 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);