mysql根據查詢結果批量更新多條資料(插入或更新)
1.1 前言
mysql根據查詢結果執行批量更新或插入時經常會遇到1093的錯誤問題。基本上批量插入或新增都會涉及到子查詢,mysql是建議不要對需要操作的表放入子查詢條件中的,因此我們儘量避免子查詢中涉及到需要操作的表,如果無法避免,則可以考慮用連線查詢的方式進行。
ERROR 1093 (HY000): You can`t specify target table `dir` for update in FROM clause
1.2 根據查詢結果批量更新
- 批量更新另一張表的查詢結果:
update
file_directory_info dir
left joinfile_directory_temp dirTemp
ondirTemp.pk_id > 1000
and
dirTemp.dir_category = dir.dir_category
set
dir.parent_id = dirTemp.pk_id,
dir.dir_level = 2,
dir.dir_seq = concat(`.`,dirTemp.pk_id, dir.dir_seq)
where dir.dir_level is null;
1.3 根據查詢結果批量新增
- 直接新增另一張表的查詢結果:
insert into file_directory_info (pk_id, dir_category, dir_seq, dir_name, parent_id) select (dictid + 1000) as pk_id, dictid as dir_category, concat(`.`,(dictid + 1000),`.`) as dir_seq, dictname as dir_name, 0 as parent_id from dict_entry dict where dict.dictTypeid = `HTCM_FILE_CLASSIFICTION` ;