mysql根據查詢結果批量更新多條資料(插入或更新)

炭燒小雞發表於2018-08-16

mysql根據查詢結果批量更新多條資料(插入或更新

1.1 前言

  mysql根據查詢結果執行批量更新或插入時經常會遇到1093的錯誤問題。基本上批量插入或新增都會涉及到子查詢,mysql是建議不要對需要操作的表放入子查詢條件中的,因此我們儘量避免子查詢中涉及到需要操作的表,如果無法避免,則可以考慮用連線查詢的方式進行。

  ERROR 1093 (HY000): You can`t specify target table `dir` for update in FROM clause

1.2 根據查詢結果批量更新

  1. 批量更新另一張表的查詢結果:

    update

        file_directory_info dir 
    left join

          file_directory_temp dirTemp
    on

          dirTemp.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 根據查詢結果批量新增

  1. 直接新增另一張表的查詢結果:
    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` ; 

相關文章