oracle 用一个表字段更新另一个表字段三种方法

    技术2022-05-19  22

    1. update (select .....) set column1 = column2;

    update (select iy.company_name company_name1, cc.company_name_jc company_name2        from income_year_item iy , city_company cc       where iy.company_code = cc.code       )   set company_name1 = company_name2;

     

    2.只能单行子查询s

    update  CITY_PROJECT_SCALE_INFO c  set (c.value) = (       select d.value from CITY_PROJECT_SCALE_INFO @test d where d.project_id = '7d7fd580a06240b2a9137dc2bbe831e9'          and d.project_id = c.project_id and c.company_code = d.company_code) where exists (  select 1 from  CITY_PROJECT_SCALE_INFO @test d where d.project_id = '7d7fd580a06240b2a9137dc2bbe831e9'          and d.project_id = c.project_id and c.company_code = d.company_code)

     

    请你尤其注意这里的where子句,你可以尝试不写where子句来执行以下这句话,你将会使得CITY_PROJECT_SCALE_INFO中的很多值变成空。

    这是因为在oracle的update语句中如果不写where子句,oracle将会默认的把所有的值全部更新,即使你这里使用了子查询并且某在值并不能在子查询里找到,你就会想当然的以为,oracle或许将会跳过这些值吧,你错了,oracle将会把该行的值更新为空。

     

    3.使用merg inot 语句

    --更新生产基础字段merge into city_cfg_data_column_common cf1 using       city_cfg_data_column_common2 cf2 on       (cf1.resourceid = cf2.resourceid)   when matched then        update set   cf1.template_type = cf2.template_type,                     cf1.chinese_name = cf2.chinese_name,                     cf1.column_name = cf2.column_name,                     cf1.column_type = cf2.column_type,                     cf1.column_size = cf2.column_size  when not matched then       insert (cf1.resourceid,cf1.template_type,cf1.chinese_name,cf1.column_name,cf1.column_type,cf1.column_size              ,cf1.is_can_edit,cf1.is_unique,cf1.is_can_cover,cf1.show_order)       values (cf2.resourceid,cf2.template_type,cf2.chinese_name,cf2.column_name,cf2.column_type,cf2.column_size              ,cf2.is_can_edit,cf2.is_unique,cf2.is_can_cover,cf2.show_order)              


    最新回复(0)