当前位置:网站首页 > 创业 > 正文

sql 联合更新、关联更新

0 张子豪 张子豪 2025-10-11 05:36 1

sql 要将两个或者多个表的数据联系关系,然后,点窜别的一个表数据时,需要用到如下布局:

UPDATE ...

SET ...

FROM xxx, xxxx

WHERE  ...

方式/步调

  1. 1

    【若是存在测试姑且表,则先删除,便于反复执行SQL】:

    IF OBJECT_ID('tempdb..#SourceTable1') IS NOT NULL DROP TABLE #SourceTable1;

    IF OBJECT_ID('tempdb..#SourceTable2') IS NOT NULL DROP TABLE #SourceTable2;

    IF OBJECT_ID('tempdb..#UpdateTable') IS NOT NULL DROP TABLE #UpdateTable;

  2. 2

    【建立源表1】:

    CREATE TABLE #SourceTable1(

    Id UNIQUEIDENTIFIER,

    SCode VARCHAR(50),

    SName NVARCHAR(100),

    Remark NVARCHAR(500)

    )

  3. 3

    【建立源表2】:

    CREATE TABLE #SourceTable2(

    Id UNIQUEIDENTIFIER,

    SCode VARCHAR(50),

    SAttr1 VARCHAR(100),

    SAttr2 VARCHAR(100)

    )

  4. 4

    【建立需要更新数据的表】:

    CREATE TABLE #UpdateTable(

    Id UNIQUEIDENTIFIER,

    SCode VARCHAR(50),

    SName NVARCHAR(100),

    SAttr1 VARCHAR(100),

    SAttr2 VARCHAR(100)

    )

  5. 5

    【插入源表1测试数据】:

    INSERT INTO #SourceTable1(Id, SCode, SName, Remark) VALUES(NEWID(), 'SCode1', '更新名字1', '更新测试备注1');

    INSERT INTO #SourceTable1(Id, SCode, SName, Remark) VALUES(NEWID(), 'SCode2', '更新名字2', '更新测试备注2');

    INSERT INTO #SourceTable1(Id, SCode, SName, Remark) VALUES(NEWID(), 'SCode3', '更新名字3', '更新测试备注3');

       -- 查询插入的成果

       SELECT * FROM #SourceTable1

  6. 6

    【插入源表2测试数据】:

    INSERT INTO #SourceTable2(Id, SCode, SAttr1, SAttr2) VALUES(NEWID(), 'SCode1', 'SCode1-更新属性1', 'SCode1-更新属性2');

    INSERT INTO #SourceTable2(Id, SCode, SAttr1, SAttr2) VALUES(NEWID(), 'SCode2', 'SCode2-更新属性1', 'SCode2-更新属性2');

       -- 查询插入的成果

       SELECT * FROM #SourceTable2

  7. 7

    【插入#UpdateTable的原始记实】:

    INSERT INTO #UpdateTable(Id, SCode, SName, SAttr1, SAttr2) VALUES(NEWID(), 'SCode1', '名字1', 'SCode1-属性1', 'SCode1-属性1');

    INSERT INTO #UpdateTable(Id, SCode, SName, SAttr1, SAttr2) VALUES(NEWID(), 'SCode2', '名字2', 'SCode2-属性2', 'SCode2-属性2');

    INSERT INTO #UpdateTable(Id, SCode, SName, SAttr1, SAttr2) VALUES(NEWID(), 'SCode3', '名字3', 'SCode3-属性3', 'SCode3-属性3');

       -- 查询插入的成果

       SELECT * FROM #UpdateTable

  8. 8

    【利用结合查询,将#UpdateTable、源表1、2中不异SCode的行字段更新到表#UpdateTable】:

    UPDATE ut

    SET ut.SName = sc1.SName,

        ut.SAttr1 = sc2.SAttr1,

    ut.SAttr2 = sc2.SAttr2

    FROM #UpdateTable ut, #SourceTable1 sc1, #SourceTable2 sc2

    WHERE ut.SCode = sc1.SCode

    AND ut.SCode = sc2.SCode

       -- 查询插入的成果

       SELECT * FROM #UpdateTable

来源:百闻(微信/QQ号:9397569),转载请保留出处和链接!


本文链接:https://www.ibaiwen.com/web/217469.html

张子豪

张子豪

TA很懒,啥都没写...

@百闻娱乐 本站部分内容转自互联网,若有侵权等问题请及时与本站联系,我们将在第一时间删除处理。 | 粤ICP备2024343649号 | (地图