zoukankan      html  css  js  c++  java
  • SQL中使用update inner join和delete inner join

    Update
    
    Update XXX set XXX where 这种写法大家肯定都知道,才发现update和delete居然支持inner join的update方式,这个在表间关联来做更新和删除操作非常有用.
    
    列子:
    Sql代码
    
        update tb_User  
        set pass=''  
        from tb_User usr  
        inner join tb_Address addr on usr.nAddressFK = addr.nAddressID  
        where usr.id=123  
    
    update tb_User set pass='' from tb_User usr inner join tb_Address addr on usr.nAddressFK = addr.nAddressID where usr.id=123
    
    update的格式是
    update t1 set t1.name=’Liu’ from t1 inner join t2 on t1.id = t2.tid
    
    MYSQL,ACCESS 写法如下:
    Sql代码
    
        UPDATE mem_world AS mw1 INNER JOIN mem_world   AS   mw2    
        ON   mw1.parentid = mw2.wid   
        SET mw1.level = mw2.level    
        WHERE mw2.baseid = 107    
        AND   mw2.parentid = 0    
        AND   mw2.size > 1;  
    
    UPDATE mem_world AS mw1 INNER JOIN mem_world AS mw2 ON mw1.parentid = mw2.wid SET mw1.level = mw2.level WHERE mw2.baseid = 107 AND mw2.parentid = 0 AND mw2.size > 1;
    
    on是表连接的筛选条件
    就是说,表连接后,会产生一个类似于临时的视图这么一个东西
    where是从这个临时的视图中筛选数据的
    所以,你首先要搞清,你的所谓的2个条件属于哪一种
    
    Delete
    delete 语句也是类似
    delete from t1 from t1 inner join t2 on t1.id = t2.tid
    
    注意蓝色部分。
    mysql:
    Sql代码
        DELETE mwb FROM   mem_world_building AS mwb INNER JOIN mem_world AS mw  
        ON mwb.wid = mw.wid  
        where mw.type between 11 and 15   
        and baseid = 107   
        and mw.parentid <> 0   
        and   mw.size > 1;  
    
    DELETE mwb FROM mem_world_building AS mwb INNER JOIN mem_world AS mw ON mwb.wid = mw.wid where mw.type between 11 and 15 and baseid = 107 and mw.parentid <> 0 and mw.size > 1;
    
    下面是ORACLE的:
    Sql代码
        DELETE TABLE1 where KHID exists ( select KHID from table2 where FWDWID=8)  
    Sql代码
        DELETE TABLE1 where exists ( select 1 from table2 where and table1.khid=table2.khid and FWDWID=8); 
  • 相关阅读:
    Free HTML5 Bootrap Admin Template
    js框架简明
    ELKF(Elasticsearch+Logstash+ Kibana+ Filebeat) 部署
    docker-构建 oracle12c-r2(12.2.0.1) 的镜像
    线上故障排查——drools规则引擎使用不当导致oom
    抓住业务核心,避免过度抽象
    Disruptor的应用示例——大文件拆分
    Disruptor3.0的实现细节
    Disruptor——一种可替代有界队列完成并发线程间数据交换的高性能解决方案
    大文件拆分方案的java实践(附源码)
  • 原文地址:https://www.cnblogs.com/JuneZhang/p/3064384.html
Copyright © 2011-2022 走看看