개발이야기/MySQL

[MySQL] SELECT 결과 UPDATE 하기

후린개발자 2023. 2. 19.
반응형

SELECT 결과로 UPDATE 하는 다양한 방법이 있습니다.

예제 테이블 생성과 DATA를 넣어 줍니다.

CREATE TABLE t_table (
  id VARCHAR(20),
  name VARCHAR(50),
	email VARCHAR(20),
  age INT
);

INSERT INTO t_table (id, name, email, age)
VALUES ('user1', '홍길동', 'user1@mail.com', 25), ('user2', '제라드', 'user2@mail.com', 24), ('user3', '루니', 'user3@mail.com', 30), ('user4', '렘파드', 'user4@mail.com', 29);


아래처럼 테이블이 생성되었습니다.

t_table 정보


테이블이 하나일 경우는 WHERE 절에 조건을 걸고, SET에 UPDATE 할 내용을 작성합니다.
다만, MYSQL은 ORACLE과 달리 UPDATE/DELETE 시 자신 테이블 DATA를 바로 사용하지 못하여, sub query 하나 더 넣고 감싸서 쿼리를 작성하시면 됩니다.

UPDATE t_table
SET age = 35
WHERE id IN (
	select a.id 
	from(
  SELECT id FROM t_table WHERE email = 'user2@mail.com') a
);

UPDATE 쿼리 결과 (user2 = age 35)


다음은 테이블이 2개 일 경우, UPDATE 방법입니다.
테이블을 하나 더 만들고, DATA를 넣어 줍니다.

CREATE TABLE t_table_info (
  id VARCHAR(20),
  pay_dt DATE
);

INSERT INTO t_table_info (id)
VALUES ('user1'), ('user2');

t_table_info 정보


첫 번째 UPDATE문은 WHERE절에 첫 번째 테이블의 DATA를 조회해서 PAT_DT 필드를 업데이트합니다.
두 번째 UPDATE문은 INNER JOIN을 사용해서 user1의 PAY_DT 필드를 업데이트합니다.
간단한 UPDATE문이니 응용해서 사용하시면 됩니다. (UPDATE 구문을 사용하실 때는 항상 주의 바랍니다)

UPDATE t_table_info
SET pay_dt = now()
WHERE id IN (
  SELECT id
  FROM t_table
  WHERE id='user2'
);

UPDATE t_table_info a
INNER JOIN t_table b ON a.id = b.id
SET a.pay_dt = now()
WHERE b.id='user1'
UPDATE 결과 (t_table_info)

반응형

댓글

💲 추천 글