개발자의 끄적끄적

[Mysql] Select결과를 Update 문에 반영하기 [펌] 본문

개발/sql

[Mysql] Select결과를 Update 문에 반영하기 [펌]

효벨 2020. 6. 28. 01:00
728x90
반응형

[Mysql] Select결과를 Update 문에 반영하기 [펌]

 

 

1. 일반적인 Update문

 일반적인 Update문은 아래와 같은 방식을 아래와 같은 방식이다.

 

UPDATE 
    [테이블명]
SET
    [필드명 = 새로운 값]
WHERE
    [조건문]

 

 2. Select 결과와 Join

 앞서 말한 것 처럼, Mysql과 다른 DB프레임워크의 방식이 다르다.

 

Mssql 버전

UPDATE 
    [테이블A]
SET
    [테이블A].필드 = [테이블B].필드
FROM
    [테이블A],[테이블B]
WHERE 
    [테이블A].id = [테이블B].id

 

Mysql 버전

UPDATE
    [테이블A],[Select 질의] B
SET
    [테이블A].필드 = B.필드
WHERE
	[테이블A].id = B.id

 

오라클 버전

UPDATE
	[테이블A] A
SET 
    A.필드 = [SELECT B.필드 FROM 테이블B B WHERE B.id = ###]
WHERE A.id = ###;

 

아래는 Mysql에서, 실제 시즌 랭킹의 상위 %별로, 그 점수를 유저의 재화로 UPDATE하고 있는 예제이다.

UPDATE 
	UserMoney as um,
	(SELECT user_id, curr  FROM
		(SELECT
		    id as user_id,
		    @prev := @curr as prev,
		    @curr := point as curr,
		    @rank := IF(@prev > @curr, @rank+@ties, @rank) AS rank,
		    (@rank/@total)*100 as percentrank
		FROM
			(SELECT * FROM UserPoint WHERE season = 3) c,
			(SELECT
					@curr := null,
			        @prev := null,
			        @rank := 0,
			        @ties := 1,
			        @total := count(*) from UserPoint where play_count > 10 and season = 3) b
		ORDER BY
		    point DESC ) a 
		WHERE percentrank >= 0 AND percentrank <= 1) d

SET 
	um.energy = d.curr
	
WHERE um.id = d.user_id;

 



출처: https://shakddoo.tistory.com/entry/Mysql-Select결과를-Update-문에-반영하기 [겨울팥죽 여름빙수]

반응형
Comments