Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 更新列并从更新的列更新另一个列_Sql_Oracle_Sql Update - Fatal编程技术网

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