base_user基礎表中需要新增乙個欄位is_at_school(是否在校:0否 1是)標識人員是否在校,該字段與status_code(人員狀態編碼)相關聯,關聯關係如下圖,現需要在新增欄位後歷史資料的該字段值要更新成相應的值。
-- 更新在校狀態的『是否在校』為是
update base_user
set is_at_school = 1
where
id in (
select
ids.id
from
(select
idfrom
base_user
where
`status_code` in ('04', '10', '11')
) as ids
);-- 更新非在校狀態的『是否在校』為否
update base_user
set is_at_school = 0
where
id in (
select
ids.id
from
(select
idfrom
base_user
where
`status_code` in ('01','02','03','05','06','07','08','09')
) as ids
);
要點記錄:用in指定範圍時,若該範圍是查詢出來的結果集,那麼需要把結果集當作乙個表,自我查詢一遍,不然會報錯「1093 - you can't specify target table 'result' for update in from clause 」格式為:select ids.id from (結果集)ids
update base_user
set is_at_school = (
case
when `status_code` in ('04', '10', '11') then
1 when `status_code` ('01', '02', '03', '05','06', '07', '08', '09') then
0 end
)
要點記錄:參考:case when [expr] then [result1]…else [default] end
:搜尋函式可以寫判斷、範圍指定等表示式,並且搜尋函式只會返回第乙個符合條件的值,其他case
被忽略,後面也可以不加else。該搜尋函式作用於涉及到的整個集合中的對應字段。
補充記憶:
case when簡單函式用法: case [col_name] when [value1] then [result1]…else [default] end 它只會返回第乙個符合條件的值,其他
case
被忽略,後面也可以不加else。
oracle批量更新乙個表中的乙個字段
最近遇到乙個sql問題。老大們讓我把乙個表中的一列資料做更新。更新的內容和對照表有給提供。後來仔細檢視資料 總結出這樣的sql 語句。update 更新表 b set b.需要更新的字段 select a.參考更新字段 from 對照表 a where a.對照表舊欄位 b.更新表需要更新的字段 注...
mysql多表乙個字段
先執行這三個 show variables like group concat max len 查詢大小 set global group concat max len 10240000 設定大小滿足執行後能夠存放所有的插入語句 set session group concat max len 10...
mysql乙個欄位為空時使用另乙個字段排序
表中有兩個日期欄位createdate,updatedate。其中updatedate可以為空,要求使用updatedate排序,如果updatedate為空則使用createdate排序,結果要順序排下來。按照常規方法 這樣的結果是為空的資料排在了最下面,不符合要求。這樣試試 這樣排的結果是先按u...