我以前看過類似的問題,但它們似乎更新了具有多個案例條件的單個列,而我為多個列找到的一個答案似乎有點長。
假設我有一張這樣的表:
| 列_1 | 列_2 | 第 3 列 | 第 4 列 | 第 5 列 |
|---|---|---|---|---|
| 第一的 | 值 1 | |||
| 第二 | 值 2 | |||
| .... | .... | |||
| 第十二 | 值 3 |
我想使用 column_1 作為鍵并使用已知值更新第 3 列、第 4 列和第 5 列。
我最初的查詢猜測是:
UPDATE table SET
Column_3, Column_4, Column_5
CASE
When Column_1 = 'First' Then 'first_col_3_val', 'first_col_4_val', 'first_col_5_val'
When Column_1 = 'Second' Then 'second_col_3_val', 'second_col_4_val', 'second_col_5_val'
...
When Column_1 = 'Tenth' Then 'tenth_col_3_val', 'tenth_col_4_val', 'tenth_col_5_val'
END
類似問題的解決方案是
UPDATE table
SET Column_3
CASE
When Column_1 = 'First' Then 'first_col_3_val'
When Column_1 = 'Second' Then 'second_col_3_val'
...
END
SET Column_4
CASE
When Column_1 = 'First' Then 'first_col_4_val'
When Column_1 = 'Second' Then 'second_col_4_val'
...
END
SET Column_5
CASE
When Column_1 = 'First' Then 'first_col_5_val'
When Column_1 = 'Second' Then 'second_col_5_val'
...
END
我的初始查詢會起作用嗎?還是我正在尋找不同的 SQL 功能,如重復鍵?我閱讀了 MySQL If() 函式,但我正在使用 Microsoft SQL。謝謝您的幫助!
uj5u.com熱心網友回復:
可能你正在尋找這樣的東西:
update T
set T.column_3 = V.column_3
,T.column_4 = V.column_4
,T.column_5 = V.column_5
from table T
inner join
(
values
('first', 'first_3', 'first_4', 'first_5'),
('second', 'second_3', 'second_4', 'second_5')
...
) V (column_1, column_3, column_4, column_5)
on V.column_1 = T.column_1
uj5u.com熱心網友回復:
這是糟糕的設計。如果遇到這個問題,你就做錯了。
create table tab(
Column_1 varchar(100),
Column_2 varchar(100),
Column_3 varchar(100),
Column_4 varchar(100),
Column_5 varchar(100));
insert tab (Column_1) values ('First'), ('Second'), ('Twelfth');
select top 0 * into #tmp from tab;
insert #tmp (Column_1, Column_3, Column_4, Column_5) values
('First', 'first_col_3_val', 'first_col_4_val', 'first_col_5_val'),
('Second', 'second_col_3_val', 'second_col_4_val', 'second_col_5_val'),
('Twelfth', 'twelfth_col_3_val', 'twelfth_col_4_val', 'twelfth_col_5_val');
update tab
set Column_3 = #tmp.Column_3,
Column_4 = #tmp.Column_4,
Column_5 = #tmp.Column_5
from tab join #tmp on tab.Column_1 = #tmp.Column_1;
select * from tab;
資料庫<>小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/353027.html
標籤:sql sql-server
上一篇:TSQL中的冪函式
下一篇:我想更新表中的字串
