好问题 👍
在 标准 SQL 和 MySQL 中,
CASE WHEN ... THEN ... 的 THEN 后面 不能直接写一个普通的 SELECT 语句。
THEN 后面必须是一个**返回单个值(标量)**的表达式。
🚫 错误示例(不能这样写)
这在 MySQL 中会报错:
✅ 正确写法(但有条件)
如果你希望根据条件去查询子表的值,
你可以在 THEN 后面放一个 子查询(scalar subquery),
只要这个子查询保证 只返回一个值。
✅ 例如:
✔ 要点:
- 
子查询必须只返回 一行一列; 
- 
否则会报错: 
 ERROR 1242 (21000): Subquery returns more than 1 row
⚡️性能建议
虽然这样写是合法的,但如果数据量大,性能会很差(每行执行一次子查询)。
更推荐使用 JOIN + CASE 的方式:
✅ 总结表
| 场景 | 是否允许 | 说明 | 
|---|---|---|
| THEN后是常量或表达式 | ✅ | 常规写法 | 
| THEN后是返回单值的子查询 | ✅ | 合法但要保证只返回一行 | 
| THEN后是返回多行的子查询 | ❌ | 会报错 | 
| 想返回关联表字段 | ✅(推荐JOIN) | 性能更好,可读性更强 | 
 
                    
                
 
                
            
        
 浙公网安备 33010602011771号
浙公网安备 33010602011771号