更新列并从更新的 col 更新另一个 col
Posted
技术标签:
【中文标题】更新列并从更新的 col 更新另一个 col【英文标题】:update column and update another col from updated col 【发布时间】:2020-03-05 09:38:07 【问题描述】:这是一个可行的解决方案吗?
BEGIN
UPDATE my_table
SET my_column = my_value
WHERE my_conditions,
my_column2 = my_column --my_updated_column_value
COMMIT;
END;
或者如何更新具有相同值的多个列?
【问题讨论】:
【参考方案1】:那就是
update my_table
set my_column = my_value,
my_column2 = my_value --> this
where my_conditions;
因为,如果您将其设置(如答案之一所示)为
my_column2 = my_column
您会将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】:只需将更新放在语句的“设置”部分
begin
update my_table
set my_column = my_value
,my_column2 = my_column --my_updated_column_value
where my_conditions
commit;
end;
【讨论】:
并非如此。这样做,您会将 MY_COLUMN2 设置为 old MY_COLUMN 的值,这不是 OP 想要的(至少,我相信如此)。 你是对的,我误读了问题 theel op 想要在一个更新语句中设置多个列而不是两个单独的更新语句 - 每列一个【参考方案3】:您可以在一个语句中直接更新 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
Demo
【讨论】:
以上是关于更新列并从更新的 col 更新另一个 col的主要内容,如果未能解决你的问题,请参考以下文章
MySQL AFTER 更新触发器与 New.col<> OLD.col