[MariaDB] 다른 테이블 컬럼 값으로 업데이트하기 (feat.GROUP BY)

가비·2021년 9월 27일
0

[MariaDB]

목록 보기
2/3

products 테이블의 min_price 컬럼을 연결된 items 테이블의 price 컬럼들 중 최솟값으로 업데이트

# items
+---------+-------+------------+
| item_id | price | product_id |
+---------+-------+------------+
|       1 | 30000 |          1 |
|       2 | 30000 |          1 |
|       3 | 10000 |          1 |
+---------+-------+------------+

# products
+------------+-----------+
| product_id | min_price |
+------------+-----------+
|          1 |     20000 |
+------------+-----------+

위와 같은 데이터를 가졌다고 가정하였을때 items 테이블의 product_id1인 아이템의 가격들 중 최솟값과 products 테이블의 product_id가 1인 상품의 최소가격이 일치하지 않는 경우를 먼저 구해보면 아래와 같은 결과를 얻을 수 있다.

# query
SELECT p.product_id , p.min_price , min(i.price) item_min
FROM products p
JOIN items i ON
p.product_id = i.product_id
GROUP BY p.product_id
HAVING p.min_price != item_min

# result
+------------+-----------+----------+
| product_id | min_price | item_min |
+------------+-----------+----------+
|          1 |     20000 |   10000  |
+--------==--+-----------+----------+

얻은 결과에서 products 테이블의 min_price 값을 item_min의 값으로 업데이트하여 일치시켜 보자.

# query
UPDATE products p
INNER JOIN (SELECT p.product_id , p.min_price , min(i.price) item_min
FROM products p
JOIN items i ON
p.product_id = i.product_id
GROUP BY p.product_id) t ON
p.id = t.id SET
p.min_price = t.item_min
WHERE t.min_price != t.item_min

# 짜란✨
+------------+-----------+----------+
| product_id | min_price | item_min |
+------------+-----------+----------+
|          1 |     10000 |   10000  |
+--------==--+-----------+----------+

👉 UPDATE 절에서의 GROUP BY가 필요한 경우 GROUP BY 결과에 INNER JOIN 하여 사용한다.

0개의 댓글