SQL update query using joins

后端 未结 11 1834
天涯浪人
天涯浪人 2020-11-22 01:15

I have to update a field with a value which is returned by a join of 3 tables.

Example:

select
    im.itemid
    ,im.sku as iSku
    ,gm.SKU as GSKU         


        
11条回答
  •  挽巷
    挽巷 (楼主)
    2020-11-22 01:40

    You can update with MERGE Command with much more control over MATCHED and NOT MATCHED:(I slightly changed the source code to demonstrate my point)

    USE tempdb;
    GO
    IF(OBJECT_ID('target') > 0)DROP TABLE dbo.target
    IF(OBJECT_ID('source') > 0)DROP TABLE dbo.source
    CREATE TABLE dbo.Target
        (
          EmployeeID INT ,
          EmployeeName VARCHAR(100) ,
          CONSTRAINT Target_PK PRIMARY KEY ( EmployeeID )
        );
    CREATE TABLE dbo.Source
        (
          EmployeeID INT ,
          EmployeeName VARCHAR(100) ,
          CONSTRAINT Source_PK PRIMARY KEY ( EmployeeID )
        );
    GO
    INSERT  dbo.Target
            ( EmployeeID, EmployeeName )
    VALUES  ( 100, 'Mary' );
    INSERT  dbo.Target
            ( EmployeeID, EmployeeName )
    VALUES  ( 101, 'Sara' );
    INSERT  dbo.Target
            ( EmployeeID, EmployeeName )
    VALUES  ( 102, 'Stefano' );
    
    GO
    INSERT  dbo.Source
            ( EmployeeID, EmployeeName )
    VALUES  ( 100, 'Bob' );
    INSERT  dbo.Source
            ( EmployeeID, EmployeeName )
    VALUES  ( 104, 'Steve' );
    GO
    
    SELECT * FROM dbo.Source
    SELECT * FROM dbo.Target
    
    MERGE Target AS T
    USING Source AS S
    ON ( T.EmployeeID = S.EmployeeID )
    WHEN MATCHED THEN
        UPDATE SET T.EmployeeName = S.EmployeeName + '[Updated]';
    GO 
    SELECT '-------After Merge----------'
    SELECT * FROM dbo.Source
    SELECT * FROM dbo.Target
    

提交回复
热议问题