[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

위의 조건에서 조인 된 다른 mf_item_number값으로 table 의 필드 값 을 업데이트하고 싶습니다 item_master.

MS SQL Server에서 어떻게해야합니까?



답변

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. 따라서이 im경우에는 유효합니다

일반적인 예

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


답변

가장 쉬운 방법 중 하나는 공통 테이블 식을 사용하는 것입니다 (이미 SQL 2005를 사용하고 있으므로).

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>

쿼리 실행 엔진은 자체적으로 레코드를 업데이트하는 방법을 알아냅니다.


답변

이것을 MySQL에 적용-에 FROM절이 UPDATE없지만 다음과 같이 작동합니다.

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


답변

위의 SQL을 사용하지 않았지만 다음은 join 문을 기반으로 테이블을 업데이트하는 예입니다.

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%'


답변

다음과 같이 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 절에서 이러한 테이블을 바인드하려면 조건을 제공하고 조인 조작을 제공해야합니다.

마크


답변

MySQL : 일반적으로 요구 사항에 따라 필요한 변경을 수행하십시오.

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


답변

이렇게 해보십시오 …

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;