• ORACLE多表关联UPDATE 语句


    1) 最简单的形式

    SQL 代码

     --经确认customers表中所有customer_id小于1000均为'北京'

    --1000以内的均是公司走向全国之前的本城市的老客户:)
    update customers
    set city_name='北京'
    where customer_id<1000

    2) 两表(多表)关联update -- 仅在where字句中的连接

    SQL 代码
    复制代码
    --这次提取的数据都是VIP,且包括新增的,所以顺便更新客户类别
    update customers a -- 使用别名
    set customer_type='01' --01 为vip,00为普通
    where exists (select 1
    from tmp_cust_city b
    where b.customer_id=a.customer_id
    )
    复制代码

    3) 两表(多表)关联update -- 被修改值由另一个表运算而来

    SQL 代码
    复制代码
    update customers a -- 使用别名
    set city_name=(select b.city_name from tmp_cust_city b where b.customer_id=a.customer_id)
    where exists (select 1
    from tmp_cust_city b
    where b.customer_id=a.customer_id
    )
    -- update 超过2个值
    update customers a -- 使用别名
    set (city_name,customer_type)=(select b.city_name,b.customer_type
    from tmp_cust_city b
    where b.customer_id=a.customer_id)
    where exists (select 1
    from tmp_cust_city b
    where b.customer_id=a.customer_id
    )
    复制代码
    -- 方法1.
    UPDATE  表2
    SET
      表2.C  =  (SELECT  B  FROM  表1  WHERE   表1.A = 表2.A)
    WHERE
      EXISTS ( SELECT FROM   表1  WHERE   表1.A = 表2.A)
     
       
    -- 方法2
    MERGE INTO 表2 
    USING 表1
    ON ( 表2.A = 表1.A )    -- 条件是 A 相同
    WHEN MATCHED THEN UPDATE SET 表2.C = 表1.B   -- 匹配的时候,更新
     
    二,

    oracle随机读取表中的N条数据方法:

    1) select from (select from tablename order by sys_guid()) where rownum < N; 
    2) select from (select from tablename order by dbms_random.value) where rownum< N; 
    3) select *  from (select from table_name sample(10)   order by trunc(dbms_random.value(0, 1000)))  where rownum < N;
     

    说明: 
      sample(10)含义为检索表中的10%数据,sample值应该在[0.000001,99.999999]之间,其中 sys_guid() 和 dbms_random.value都是内部函数

    注:
      在使1)方法时,即使用sys_guid() 这种方法时,有时会获取到相同的记录,即:和前一次查询的结果集是一样的(可能是和操作系统有关:windows正常,linux异常;也可能是因为sys_guid()函数本身的问题,有待继续研究)
      所以,为确保在不同的平台每次读取的数据都是随机的,建议采用2)和3)两种方案,其中2)方案更常用。3)方案缩小了查询的范围,在查询大表,且要提取数据不是很不多的情况下,会对查询速度上有一定的提高

  • 相关阅读:
    解决Ubuntu 18.04中文输入法的问题,安装搜狗拼音
    POJ 1151 Atlantis 矩形面积求交/线段树扫描线
    [CTF]思维导向图
    Ubuntu Linux 学习篇 配置DHCP服务器
    Ubuntu Linux 学习篇 配置DNS服务器
    Ubuntu Linux DNS服务器 BIND9配置文件命令介绍
    Ubuntu Linux 学习篇 配置DHCP服务器
    Ubuntu Linux 学习篇 配置DNS服务器
    Ubuntu Linux DNS服务器 BIND9配置文件命令介绍
    随记
  • 原文地址:https://www.cnblogs.com/jimcsharp/p/7406587.html
Copyright © 2020-2023  润新知