[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.
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.가장 쉬운 방법 중 하나는 (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.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.여기에 위의 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.당신은 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.MySQL은 : 일반적으로, 귀하의 요구 사항 파 필요한 사항을 변경합니다 :
MySQL은 : 일반적으로, 귀하의 요구 사항 파 필요한 사항을 변경합니다 :
UPDATE shopping_cart sc LEFT JOIN package pc ON sc. package_id = pc.id SET sc. amount = pc.amount
-
==============================
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.다음과 같은 쿼리를 사용할 수 있습니다 :
다음과 같은 쿼리를 사용할 수 있습니다 :
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.당신은 더 많은 제어를 통해 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
from https://stackoverflow.com/questions/982919/sql-update-query-using-joins by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의에 그렇지 않은 경우 (일명 "upsert"또는 "병합")을 삽입있는 경우 어떻게 업데이트하나요? (0) | 2020.03.09 |
---|---|
[SQL] 오라클 SQL은 : 다른 테이블의 데이터로 테이블을 업데이트 (0) | 2020.03.09 |
[SQL] MySQL은 여러 업데이트 (0) | 2020.03.09 |
[SQL] 권장 SQL 데이터베이스 태그의 디자인 또는 태그 [마감] (0) | 2020.03.08 |
[SQL] 첫번째 날짜 오름차순, 널 (null)에 의해 PostgreSQL의 종류? (0) | 2020.03.08 |