Sql 更新列并从更新的列更新另一个列
这是可行的解决方案吗Sql 更新列并从更新的列更新另一个列,sql,oracle,sql-update,Sql,Oracle,Sql Update,这是可行的解决方案吗 BEGIN UPDATE my_table SET my_column = my_value WHERE my_conditions, my_column2 = my_column --my_updated_column_value COMMIT; END; 或者如何使用相同的值更新多个列 只需将更新放在语句的“set”部分即可 begin update my_table set my_column = my_value
BEGIN
UPDATE my_table
SET my_column = my_value
WHERE my_conditions,
my_column2 = my_column --my_updated_column_value
COMMIT;
END;
或者如何使用相同的值更新多个列 只需将更新放在语句的“set”部分即可
begin
update my_table
set my_column = my_value
,my_column2 = my_column --my_updated_column_value
where my_conditions
commit;
end;
那就是
update my_table
set my_column = my_value,
my_column2 = my_value --> this
where my_conditions;
因为,如果你把它设置为 您需要将
MY_COLUMN2
更新为旧的MY_COLUMN
值。看看:
SQL> create table test
2 (my_column number,
3 my_column2 number
4 );
Table created.
SQL> insert into test values (100, 200);
1 row created.
SQL> update test set
2 my_column = 300, --> "300" represents "MY_VALUE"
3 my_column2 = my_column; --> it won't be set to 300, but to 100
1 row updated.
SQL> select * from test;
MY_COLUMN MY_COLUMN2
---------- ----------
300 100
SQL>
您可以在一条语句中直接更新2个字段。这里有一个例子
drop table TAB1\\
create table TAB1
(Col1 CHAR(1),
COl2 CHAR(1)
)\\
INSERT INTO TAB1 VALUES ( 'A' , 'B' ) \\
INSERT INTO TAB1 VALUES ( 'C' , 'D' ) \\
select * from TAB1\\
UPDATE TAB1
SET
COL1 = 'E',
COL2 = 'E'
WHERE COL1 = 'A' \\
SELECT * FROM TAB1\\
结果
COL1 COL2
1 A B
2 C D
COL1 COL2
1 E E
2 C D
不太可能。这样做,您会将MY_COLUMN2设置为MY_COLUMN的旧值,这不是OP想要的(至少,我相信是这样)。您是对的,我误解了问题theel OP想要在一个update语句中设置多个列,而不是两个单独的update语句-每列一个
COL1 COL2
1 A B
2 C D
COL1 COL2
1 E E
2 C D