SQL 中更新一個表的數據是從另外的表(或者自己本身的表)查詢出來的


模板1:

update 表1 set  表1.字段1 = 

(

select 表1字段或者表2字段

from  表2

where  表1主鍵 = 表2外鍵 

及其他條件

)  where 表1.字段 = ?

樣例1:

行政區划更新:

update sjycpc_report a set qhmc_qx = (
select XALLJGMC from mz_xzjg where NODE_ID = a.xzqh_qx
)

UPDATE sr_main a
SET a.main_xm_nam05 = (
SELECT
count(1)
FROM
sr_detail b
WHERE
a.pk_sr_main = b.fk_sr_main
AND detail_bz_sad06 IN ('1', '2', '3')
) ,

a.main_xm_nam06 = (
SELECT
count(fk_sr_main)
FROM
sr_detail b
WHERE
a.pk_sr_main = b.fk_sr_main
AND detail_bz_sad06 IN ('1', '2', '3')
) where a.mdjlx = 'wb_jz'

 ----------------------------------------------

1.單表的:update user set name = (select name from user where id in (select id from user where name='小蘇'));

                 update goods set name = REPLACE(name ,' ','') ; //去空格

                 update goods set name = replace(name,'香蕉','蘋果') ; //香蕉換蘋果
                 update goods set name = price ; //將自己表中的數據賦值給另外一個屬性

2..update sr_main_ww a set sys_tjzt = 4 where exists (select 1 from sr_main b where a.fk_pk_sr_main = b.pk_sr_main and b.sys_spzt = 1);
exists 用法
3..新建表需要原表的數據(sr_main ,sr_detail ,護理人數計算)
update sr_main a set a.main_xm_nam05 = 
(
select count(1)
from sr_detail b 
where a.pk_sr_main = b.fk_sr_main
and b.detail_bz_sad06 in ('1','2','3')

)
where a.mdjlx = 'wb_jz';
4..新建表需要原表的數據(sr_main_da ,sr_detail_da ,護理人數計算)
UPDATE sr_main_da a
SET a.main_xm_nam05 = (
SELECT
count(1)
FROM
sr_detail_da b
WHERE
a.sjbfyzj = b.fk_sr_main
AND a.sjbfnf = b.sjbfnf
AND a.sjbfyf = b.sjbfyf
AND a.sjbfnf = '2019'
AND a.sjbfyf = '11'
AND a.mdjlx = 'wb_jz'
AND detail_bz_sad06 IN ('1', '2', '3')
)
WHERE
a.mdjlx = 'wb_jz'
AND a.sjbfnf = '2019'
AND a.sjbfyf = '11'

 5.right,left函數的運用

更新qlsx_bgqx,永久
-----update ycs_qlsx set qlsx_bgqx='永久';
更新qlsx_bm,需要-
-----update ycs_qlsx set qlsx_bm=(right(QLSXJBM, 9));
更新qlsx_lx
-----update ycs_qlsx set qlsx_lx=(left(QLSXJBM, 2));
-----update ycs_qlsx set qlsx_lx = CASE WHEN qlsx_lx='許可' THEN '01' WHEN qlsx_lx='處罰' THEN '03' WHEN qlsx_lx='強制' THEN '04' 
WHEN qlsx_lx='征收' THEN '05' WHEN qlsx_lx='給付' THEN '06' WHEN qlsx_lx='裁決' THEN '07' WHEN qlsx_lx='確認' THEN '08' 
WHEN qlsx_lx='獎勵' THEN '09' WHEN qlsx_lx='權力' THEN '10' WHEN qlsx_lx='服務' THEN '14' 
END ;

6.多個字段的更新

UPDATE sr_zjff_main_btff
SET zzhs = (
SELECT
count(1)
FROM
sr_main_da_btff
WHERE
fk_sr_zjff_main = ?
AND sys_spzt = 1
AND sys_scbj = 0
),
zzrs = (
SELECT
sum(mxsrs)
FROM
sr_main_da_btff
WHERE
fk_sr_zjff_main = ?
AND sys_spzt = 1
AND sys_scbj = 0
),
zzje = (
SELECT
sum(btffje)
FROM
sr_main_da_btff
WHERE
fk_sr_zjff_main = ?
AND sys_spzt = 1
AND sys_scbj = 0
)
WHERE
pk_sr_zjff_main_btff = ?

 -------------------------------------------------------------------------

mysql更新字段為拼接字符串

UPDATE music SET url=CONCAT('/',url);

-------------------------------------------------------------------------------

初始化表和update表為同一張表,初始化失敗的報錯,改為子查詢

update dsr_hc_jz e
set ffbmsl = 13
where pk_hc_jz in(
select pk_id from (
SELECT
pk_hc_jz as pk_id
FROM
dsr_hc_jz a,
mz_xzjg b,
dsr_hc_pc c
WHERE
a.jhdpc = c.pch
AND a.sys_xzqh = b.xzqh_id
AND b.node_id LIKE '33%'
AND a.sys_scbj = 0
AND a.sys_sjbj = 2
AND a.jzzbj = 0
AND c.pk_hc_pc = '7d91ab10923642a28a84a1ccb4ae6757'
)d
)

-----------------------------------------------------------------------------------

//根據不同的核對類別(年審、季審)更新救助復核日期

UPDATE sr_main
SET mjzjsrq = CASE
WHEN mdblx = '2' THEN
DATE_FORMAT(
date_add(curdate(), INTERVAL 3 MONTH),
'%Y-%m-%d'
)
ELSE
DATE_FORMAT(
date_add(curdate(), INTERVAL 1 YEAR),
'%Y-%m-%d'
)
END
WHERE
pk_sr_main = '1000191153666789376';

 -------------------------------------------------------------------------------

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM