2026-10-20 11:12:05
在SQL中,CASE语句结合不等于条件可以实现灵活的条件判断,类似于编程语言中的"if-else"结构,但功能更强大,可以直接嵌入SELECT、UPDATE等语句中使用。


CASE语句在UPDATE语句中特别有用,可以根据不同条件更新不同的行:
UPDATE your_tableSET column_to_update = CASE WHEN condition1 <> value1 THEN new_value1 WHEN condition2 != value2 THEN new_value2 ELSE column_to_update -- 保持原值 ENDWHERE some_other_condition; -- 可选的WHERE子句实际应用示例:电商平台订单状态更新
UPDATE ordersSET shipping_status = CASE WHEN order_status = 'pending' AND payment_status <> 'paid' THEN 'awaiting_payment' WHEN order_status = 'processing' AND inventory_status != 'available' THEN 'awaiting_inventory' WHEN order_status = 'shipped' AND tracking_number IS NULL THEN 'tracking_error' ELSE shipping_status -- 保持原状态 ENDWHERE order_date < CURRENT_DATE - INTERVAL '7 day'; -- 只更新7天前的订单
避免在WHERE子句中使用复杂CASE:
-- 不推荐写法(可能导致索引失效)SELECT *FROM your_tableWHERE CASE WHEN column1 > 10 THEN column2 ELSE column3 END <> 'some_value';优化建议:
将复杂CASE移至SELECT子句
创建计算列并建立索引
简化条件表达式
检查数据库执行计划进行优化
数据转换:将不同值映射为统一格式
SELECT product_id, CASE WHEN category = 'ELEC' AND price > 1000 THEN 'High-end Electronics' WHEN category = 'ELEC' AND price <= 1000 THEN 'Budget Electronics' WHEN category = 'CLTH' THEN 'Clothing' ELSE 'Other' END AS product_groupFROM products;条件聚合:
SELECT department, COUNT(*) AS total_employees, SUM(CASE WHEN salary > 5000 THEN 1 ELSE 0 END) AS high_earners, SUM(CASE WHEN salary <= 5000 THEN 1 ELSE 0 END) AS regular_earnersFROM employeesGROUP BY department;数据清洗:
UPDATE customer_dataSET cleaned_phone = CASE WHEN phone LIKE '1-%' THEN SUBSTRING(phone, 3) -- 移除国家代码 WHEN phone LIKE '(%' THEN REPLACE(REPLACE(phone, '(', ''), ')', '') -- 移除括号 ELSE phone END;通过合理使用CASE语句结合不等于条件,可以编写出更加灵活和强大的SQL查询,满足各种复杂的数据处理需求。