Mysql
更新整個表一次,標準:column_name 和每個值
我有一張有 606 行的表。第一列是簡單的
ID
(從 1 到 606 開始),接下來的列名稱是name1
、other1
、name2
、other2
等,直到name100
、other100
。我正在嘗試創建一個查詢:
update each cell if column_name like "other" if 0< cellValue < 50 then cellValue=cellValue*10 if 50<=cellValue<120 then cellValue=cellValue*5 if 120<=cellValue<230 then cellValue=cellValue*2
我不太關心效率,因為它是一次性查詢。
我努力解決它。我有一個複雜的虛擬碼想法來更好地解釋我正在嘗試做的事情,但我猜在 SQL 中不需要它,因為 SQL 查詢會檢查每一個值:
begin for i in 1 to 100 for each row if current column is named like "other"i then if 10000< value then value=value/40 elseif 0< value<50 then value=value*10 elseif 50<=value<120 then value=value*5 elseif 120<=value<230 then value=value*2 elseif 230<=value<500 then value=value*2 endif endif end for end for end
我問了一些人,他們也不知道。
的結果:
SHOW CREATE TABLE example CREATE TABLE `example` ( `id` int(11) NOT NULL, `name1` int(11) NOT NULL, `other1` int(11) NOT NULL, `name2` int(11) NOT NULL, `other2` int(11) NOT NULL, -- -- 2 * 97 columns skipped -- `name100` int(11) NOT NULL, `other100` int(11) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci
我正在使用:
MySQL Workbench Community (GPL) for Windows version 6.3.5 CE build 201 (64 bit)
它是 MySQL 5.7
Cairo 的本地實例 版本:1.10.2
作業系統:Microsoft Windows 8.1
這是一個非常簡單的查詢。您可以使用一個
CASE
表達式,每個需要更新的列一個:UPDATE table_name SET other1 = CASE WHEN other1 <= 0 THEN other1 -- no change WHEN other1 < 50 THEN other1 * 10 WHEN other1 < 120 THEN other1 * 5 WHEN other1 < 230 THEN other1 * 2 -- possibly more WHEN..THEN clauses ELSE other1 END, other2 = CASE WHEN other2 <= 0 THEN other2 -- no change WHEN other2 < 50 THEN other2 * 10 WHEN other2 < 120 THEN other2 * 5 WHEN other2 < 230 THEN other2 * 2 ELSE other2 END, --- repeat similarly for all columns that need updating ;