복붙노트

[SQL] 사용하여 SQL 업데이트 쿼리 조인

SQL

사용하여 SQL 업데이트 쿼리 조인

나는 3 개의 테이블 조인에 의해 반환되는 값으로 필드를 업데이트해야합니다.

예:

select
    im.itemid
    ,im.sku as iSku
    ,gm.SKU as GSKU
    ,mm.ManufacturerId as ManuId
    ,mm.ManufacturerName
    ,im.mf_item_number
    ,mm.ManufacturerID
from 
    item_master im, group_master gm, Manufacturer_Master mm 
where
    im.mf_item_number like 'STA%'
    and im.sku=gm.sku
    and gm.ManufacturerID = mm.ManufacturerID
    and gm.manufacturerID=34

나는 위의 조건에 가입 된 다른 값과 item_master 테이블의 mf_item_number 필드 값을 업데이트 할.

어떻게 MS SQL 서버에서이 작업을 수행 할 수 있습니까?

해결법

  1. ==============================

    1.

    UPDATE im
    SET mf_item_number = gm.SKU --etc
    FROM item_master im
    JOIN group_master gm
        ON im.sku = gm.sku 
    JOIN Manufacturer_Master mm
        ON gm.ManufacturerID = mm.ManufacturerID
    WHERE im.mf_item_number like 'STA%' AND
          gm.manufacturerID = 34
    

    그것은 명확하게 할 ... UPDATE 절은 FROM 절에 지정된 테이블 별칭을 참조 할 수 있습니다. 이 경우 메신저가 유효 그래서

    UPDATE A
    SET foo = B.bar
    FROM TableA A
    JOIN TableB B
        ON A.col1 = B.colx
    WHERE ...
    
  2. ==============================

    2.가장 쉬운 방법 중 하나는 (2005 SQL에 이미있어 이후) 공통 테이블 식을 사용하는 것입니다 :

    가장 쉬운 방법 중 하나는 (2005 SQL에 이미있어 이후) 공통 테이블 식을 사용하는 것입니다 :

    with cte as (
    select
        im.itemid
        ,im.sku as iSku
        ,gm.SKU as GSKU
        ,mm.ManufacturerId as ManuId
        ,mm.ManufacturerName
        ,im.mf_item_number
        ,mm.ManufacturerID
        , <your other field>
    from 
        item_master im, group_master gm, Manufacturer_Master mm 
    where
        im.mf_item_number like 'STA%'
        and im.sku=gm.sku
        and gm.ManufacturerID = mm.ManufacturerID
        and gm.manufacturerID=34)
    update cte set mf_item_number = <your other field>
    

    쿼리 실행 엔진은 레코드를 업데이트하는 방법을 스스로 알아내는 것입니다.

  3. ==============================

    3.MySQL의이 적응 -이 더 UPDATE에서 FROM 절 없지만,이 작품 :

    MySQL의이 적응 -이 더 UPDATE에서 FROM 절 없지만,이 작품 :

    UPDATE
        item_master im
        JOIN
        group_master gm ON im.sku=gm.sku 
        JOIN
        Manufacturer_Master mm ON gm.ManufacturerID=mm.ManufacturerID
    SET
        im.mf_item_number = gm.SKU --etc
    WHERE
        im.mf_item_number like 'STA%'
        AND
        gm.manufacturerID=34
    
  4. ==============================

    4.여기에 위의 SQL을 사용하지 않았지만 것은 조인 문을 기반으로 테이블을 갱신의 예입니다.

    여기에 위의 SQL을 사용하지 않았지만 것은 조인 문을 기반으로 테이블을 갱신의 예입니다.

    UPDATE p
    SET    p.category = c.category
    FROM   products p
           INNER JOIN prodductcatagories pg
                ON  p.productid = pg.productid
           INNER JOIN categories c
                ON  pg.categoryid = c.cateogryid
    WHERE  c.categories LIKE 'whole%'
    
  5. ==============================

    5.당신은 UPDATE 문에서 절 "FROM"이 등을 어떻게 그리고 무엇을 업데이 트를 결정하는 데 사용되는 추가 테이블을 지정할 수 있습니다 :

    당신은 UPDATE 문에서 절 "FROM"이 등을 어떻게 그리고 무엇을 업데이 트를 결정하는 데 사용되는 추가 테이블을 지정할 수 있습니다 :

    update item_master
    set mf_item_number = (some value)
    from 
       group_master as gm
       join Manufacturar_Master as mm ON ........
    where
     .... (your conditions here)
    

    WHERE 절에서는 조건을 제공하고 함께이 테이블을 결합하는 작업에 가입해야합니다.

    즙을 짜고 난 찌꺼기

  6. ==============================

    6.MySQL은 : 일반적으로, 귀하의 요구 사항 파 필요한 사항을 변경합니다 :

    MySQL은 : 일반적으로, 귀하의 요구 사항 파 필요한 사항을 변경합니다 :

    UPDATE
        shopping_cart sc
        LEFT JOIN
        package pc ON sc. package_id = pc.id    
    SET
        sc. amount = pc.amount
    
  7. ==============================

    7.이 같은 시도 ...

    이 같은 시도 ...

    Update t1.Column1 = value 
    from tbltemp as t1 
    inner join tblUser as t2 on t2.ID = t1.UserID 
    where t1.[column1]=value and t2.[Column1] = value;
    
  8. ==============================

    8.다음과 같은 쿼리를 사용할 수 있습니다 :

    다음과 같은 쿼리를 사용할 수 있습니다 :

    UPDATE im
    SET mf_item_number = (some value) 
    FROM item_master im
    JOIN group_master gm
        ON im.sku = gm.sku 
    JOIN Manufacturer_Master mm
        ON gm.ManufacturerID = mm.ManufacturerID
    WHERE im.mf_item_number like 'STA%' AND
          gm.manufacturerID = 34    `sql`
    
  9. ==============================

    9.당신은 더 많은 제어를 통해 MATCHED과 일치하지 병합 명령으로 업데이트 할 수 있습니다 (I가 약간 변경 소스 코드를 내 지점을 증명)

    당신은 더 많은 제어를 통해 MATCHED과 일치하지 병합 명령으로 업데이트 할 수 있습니다 (I가 약간 변경 소스 코드를 내 지점을 증명)

    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
    
  10. from https://stackoverflow.com/questions/982919/sql-update-query-using-joins by cc-by-sa and MIT license