Skip to content
GwiyeomGo Tech Blog
About GwiyeomGo

mysql 서브쿼리로 데이터를 Join 후 Update 사용 경험

MYSQL, 20232 min read

배경

기존에 예약발송 기능이 있었는데 즉시발송 개발 요청이 왔다 예약발송시 일까지만 기록하면 되는데 즉시 발송은 시간도 필요하다고 생각했고 dateTime 으로 타입을 정했다

A 테이블

idscheduled_datesentsent_date
1202306291
2202307121
3202307150
4202307211

서브쿼리 결과

과거에 발송한 데이터의 경우 6시에 발송되었음으로 18:00:00 를 DATE_FORMAT 으로 형태를 만들었다

SELECT * FROM A
join (
SELECT id, DATE_FORMAT(scheduled_date, '%y-%m-%d 18:00:00') AS sent_date
FROM A
WHERE sent = 1
) AS subquery
ON A.id = subquery.id;
idscheduled_datesentsent_dateidsent_date
120230629112023-06-29 18:00:00
220230712122023-06-29 18:00:00
420230721142023-07-21 18:00:00

A 테이블에서 특정 데이터를 조회한 서브쿼리 결과를 A 테이블에 업데이트 하고 싶었다

UPDATE A
JOIN (
SELECT id, DATE_FORMAT(scheduled_date, '%y-%m-%d 18:00:00') AS sent_date
FROM A
WHERE sent = 1
) AS subquery
ON A.id = subquery.id
SET A.sent_date = subquery.sent_date;
  • id 컬럼을 기준으로 조인하여 sent_date 컬럼을 업데이트
idscheduled_datesentsent_date
12023062912023-06-29 18:00:00
22023071212023-07-12 18:00:00
3202307150
42023072112023-07-21 18:00:00

컬럼 추가 후 업데이트 전에 select count(*) from A where sent =1 and sent_date is null; 값을 확인 select count(*) from A where sent =1 and sent_date is not null; 로 바뀐 결과 확인

  • MySQL에서 데이터가 NULL인 경우, = 연산자로는 NULL 값을 조회할 수 없음
© 2024 by GwiyeomGo Tech Blog. All rights reserved.