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_id
가 1
인 아이템의 가격들 중 최솟값과 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 하여 사용한다.