• SQL把一个表中数据更新到另一个表的多种方法


    在此仅记下SQL从一个表中把数据简单地更新到另一个表的多种方法, 由于水平有限,如有不妥之处请高手指正:)

    SQL 从A表取数据更新到B表 的多种方法:

    假设有二个表, 分别为:T1, T2

    先创建二个表,创建T1 如下代码:

    CREATE TABLE T1
    (
        A NVARCHAR(10),
        B NVARCHAR(10),
        DC NVARCHAR(100),
        AId int identity(10000,1) primary key
    )

    CREATE TABLE T2
    (
        A1 NVARCHAR(10),
        B1 NVARCHAR(10),
        DC1 NVARCHAR(100),
        aId1 int identity(100,1) primary key
    )

     插入测试数据:

    向T1表中插入测试数据:
    INSERT INTO T1 select 'A1','B01','一年后'
    INSERT INTO T1 select 'AA1','B001','二年后'

    再向T2表中插入测试数据:

    INSERT INTO T2 select 'A1','B01','一月后'
    INSERT INTO T2 select 'AA1','BB001','二月后'

    现在我们需要把T1表中的DC字段更新为T2表中DC1的值,条件为T1中的A字段的值等于T2表中的A1字段的值且T1表中的B字段的值等于T2表中B2字段的值(这样写主要是因为表和表之间的关联关系可能有多个字段,此处只选二个字段,多个依此类推)。

    方法一:可以根据查出的值一条一条更新去执行SQL更新.或手动更新也可以,此处不讨论这种方法,略过.

    方法二:可以通过一条SQL语句一次更新多条数据.SQL语句写法略有不同,如下:

    A): 方法

    Update T1
    set dc=(select dc1 from t2 where T1.A=T2.A1 AND T1.B=T2.B1)
    WHERE T1.AID in (
        SELECT AID FROM T1
        INNER JOIN T2 ON t1.A=T2.A1 AND T1.B=T2.B1
    )
    注:在我标我红色的in地方如果把'in'换成'='将出错,但在下面的B种写法里就可以换成'=',变成C方法写法.


    B): 方法

    Update T1
    set dc=(select dc1 from t2 where T1.A=T2.A1 AND T1.B=T2.B1)
    WHERE T1.AID in (
        SELECT T1.AID FROM T2
        WHERE t1.A=T2.A1 AND T1.B=T2.B1
    )

    C): 方法

    Update T1
    set dc=(select dc1 from t2 where T1.A=T2.A1 AND T1.B=T2.B1)
    WHERE T1.AID = (
        SELECT T1.AID FROM T2
        WHERE t1.A=T2.A1 AND T1.B=T2.B1
    )

     D): 方法

    Update T1
    set dc=(select dc1 from T2 where T1.A=T2.A1 AND T1.B=T2.B1)
    WHERE T1.A = (
        SELECT T1.A FROM T2
        WHERE T1.A=T2.A1 AND T1.B=T2.B1
    )

    E):方法

    Update T1
    set dc=(select dc1 from T2 where T1.A=T2.A1 AND T1.B=T2.B1)
    WHERE T1.A = (
        SELECT T2.A1 FROM T2
        WHERE T1.A=T2.A1 AND T1.B=T2.B1
    )

    F): 方法 

    Update T1
    set dc=(select dc1 from T2 where T1.A=T2.A1 AND T1.B=T2.B1)
    WHERE T1.A in (
        SELECT T2.A1 FROM T2
        WHERE T1.A=T2.A1 AND T1.B=T2.B1
    )

     注:如果在F)方法改写成如下的写法将会出错。

    Update T1
    set dc=(select dc1 from T2 where T1.A=T2.A1 AND T1.B=T2.B1)
    WHERE T1.A in (
        SELECT T1.A FROM T1
        INNER JOIN T2 ON t1.A=T2.A1 AND T1.B=T2.B1
    )

     此种方法将会更新掉所有符合T1.A in ()这个条件的数据,所以是不正确的, 所以不能这样写。

    G):方法

    Update T1
    set dc=(select dc1 from T2 where T1.A=T2.A1 AND T1.B=T2.B1 AND T1.DC=T2.DC1)
    FROM T1, T2
    WHERE  T1.A=T2.A1 AND T1.B=T2.B1

    H):方法

    Update T1
    set T1.dc=T2.dc1
    FROM T1
    INNER JOIN T2 ON T1.A=T2.A1 AND T1.B=T2.B1
    WHERE t1.A=T2.A1 AND T1.B=T2.B1

      注:此处我用灰色标记的部分可以去掉。

    I): 方法

    Update T1
    set T1.dc=T2.dc1
    FROM T1, T2
    WHERE  T1.A=T2.A1 AND T1.B=T2.B1

    请特别注意以上方法中我用红色标记上的代码写法。

    总节:虽然是一条简单的更新语名但也有多种写法,且每种写法各有优缺点。

    大家是否还有更简单的写法或者更容易理解的写法?如果有请提出来一起讨论,谢谢!

    说明测试环境:以上代码在MSSQL2005中验证是可行的.

  • 相关阅读:
    8.24
    8.23
    今日拔牙牙疼暂时不评论了,明天展示的时候老师也会给出建议
    8.22
    8.21
    8.20
    8.19随笔
    助教培训第四次作业
    助教培训第三次作业-墨刀的练习
    同时安装多个jdk设置及切换
  • 原文地址:https://www.cnblogs.com/AlbertFei/p/essay.html
Copyright © 2020-2023  润新知