概述
- 以下是 MySQL 中
UPDATE
結合SELECT
和UPDATE CASE WHEN
的示例:
一、UPDATE
結合 SELECT
(跨表更新)
場景:根據 orders
表中的訂單總金額,更新 users
表中用戶的 total_spent
字段。
-- 創建測試表
CREATE TABLE users (user_id INT PRIMARY KEY,username VARCHAR(50),total_spent DECIMAL(10,2)
);CREATE TABLE orders (order_id INT PRIMARY KEY,user_id INT,amount DECIMAL(10,2)
);-- 插入測試數據
INSERT INTO users VALUES (1, 'Alice', 0), (2, 'Bob', 0);
INSERT INTO orders VALUES (100, 1, 50), (101, 1, 30), (102, 2, 80);-- 更新 users.total_spent,統計每個用戶的訂單總金額
UPDATE users u
JOIN (SELECT user_id, SUM(amount) AS totalFROM ordersGROUP BY user_id
) o ON u.user_id = o.user_id
SET u.total_spent = o.total;-- 結果:Alice 的 total_spent 變為 80,Bob 的變為 80
二、UPDATE CASE WHEN
(條件更新)
場景:根據 salary
字段的值,調整 employees
表中的工資:
? 工資 < 5000 的漲 10%
? 5000 ≤ 工資 ≤ 10000 的漲 5%
? 工資 > 10000 的不變
-- 創建測試表
CREATE TABLE employees (id INT PRIMARY KEY,name VARCHAR(50),salary DECIMAL(10,2)
);-- 插入測試數據
INSERT INTO employees VALUES (1, 'John', 4000), (2, 'Jane', 6000), (3, 'Mike', 12000);-- 使用 CASE WHEN 更新工資
UPDATE employees
SET salary = CASEWHEN salary < 5000 THEN salary * 1.10WHEN salary BETWEEN 5000 AND 10000 THEN salary * 1.05ELSE salary
END;-- 結果:
-- John: 4000 → 4400
-- Jane: 6000 → 6300
-- Mike: 12000 → 不變
三、UPDATE
結合子查詢(單表條件更新)
場景:將 products
表中庫存量(stock
)低于 100 的商品的 status
標記為 ‘缺貨’。
-- 創建測試表
CREATE TABLE products (product_id INT PRIMARY KEY,product_name VARCHAR(50),stock INT,status VARCHAR(20)
);-- 插入測試數據
INSERT INTO products VALUES (1, 'Pen', 200, '正常'), (2, 'Book', 50, '正常'), (3, 'Ruler', 99, '正常');-- 使用子查詢和 CASE WHEN 更新狀態
UPDATE products
SET status = CASEWHEN stock < 100 THEN '缺貨'ELSE '正常'
END;-- 結果:
-- Pen: stock=200 → 狀態保持 '正常'
-- Book: stock=50 → 狀態變為 '缺貨'
-- Ruler: stock=99 → 狀態變為 '缺貨'