zoukankan      html  css  js  c++  java
  • 整理最近新学到的几种sql写法(三)Update使用表别名

    这个问题说来惭愧,我以前遇到这样一个问题:
    更新表A时,需要用到表A自身且字段也是同一字段,如何区分呢?
    还有更新一个表变量@tb时,我们需要给表变量的某一字段指定所属表,但是我们显然不能使用@tb,这时怎么办呢?
    一直以来用到都是比较笨的办法,直到无意间发现Update也可用别名。
    这也让我一下明白了,sql的解析是从From开始的。

     1 DECLARE @tb TABLE
     2     (
     3       OID INT,
     4       vName NVARCHAR(50),
     5       dcQty DECIMAL(152)
     6     )
     7 
     8 INSERT  INTO @tb ( OID, vName, dcQty )
     9 VALUES  ( /* OID - INT */ 1,
    10     /* vName - NVARCHAR(50) */ N'aa',
    11     /* dcQty - DECIMAL(15, 2) */ 2 ) 
    12 
    13 INSERT  INTO @tb ( OID, vName, dcQty )
    14 VALUES  ( /* OID - INT */ 2,
    15     /* vName - NVARCHAR(50) */ N'bb',
    16     /* dcQty - DECIMAL(15, 2) */ 4 ) 
    17 
    18 INSERT  INTO @tb ( OID, vName, dcQty )
    19 VALUES  ( /* OID - INT */ 2,
    20     /* vName - NVARCHAR(50) */ N'bb',
    21     /* dcQty - DECIMAL(15, 2) */ 3 ) 
    22 
    23 INSERT  INTO @tb ( OID, vName, dcQty )
    24 VALUES  ( /* OID - INT */ 3,
    25     /* vName - NVARCHAR(50) */ N'cc',
    26     /* dcQty - DECIMAL(15, 2) */ 6 ) 
    27 
    28 UPDATE  T1
    29 SET     T1.dcQty = T2.dcQty
    30 FROM    @tb AS T1
    31         JOIN ( SELECT   OID,
    32                         SUM(dcQty) AS dcQty
    33                FROM     @tb
    34                GROUP BY OID
    35              ) AS T2 ON T1.OID = T2.OID
    36 
    37 SELECT  *
    38 FROM    @tb
    39 
  • 相关阅读:
    使用redis作为缓存收集日志
    使用kafka作为缓存收集日志
    使用filebeat收集日志
    通过zabbix监控vCenter虚拟化
    zabbix配合grafana进行图形展示
    Filter学习
    spring框架学习(四)——注解方式AOP
    spring框架学习(三)——AOP( 面向切面编程)
    spring框架学习(二)——注解方式IOC/DI
    spring框架学习(一)——IOC/DI
  • 原文地址:https://www.cnblogs.com/zhaoguan_wang/p/1647764.html
Copyright © 2011-2022 走看看