他的回复:
主要是优化器会比较耗内存。同一个子查询内,嵌套case when时,会把非基表列的输出列展开,导致表达式膨胀的很大。例如CASE WHEN t1.a=1 THEN 'one' WHEN t1.a=2 THEN 'two' ELSE 'other' as num,CASE WHEN num='one' THEN 1 WHEN num='two' THEN '2 ELSE 3 as num2num2里每个num都会被展开成上面的case when,导致num2的结构就变成CASE WHEN (CASE WHEN t1.a=1 THEN 'one' WHEN t1.a=2 THEN 'two' ELSE 'other)='one' THEN 1 WHEN (CASE WHEN t1.a=1 THEN 'one' WHEN t1.a=2 THEN 'two' ELSE 'other)='two' THEN '2 ELSE 3 as num2case when的嵌套数和分支数越多,表达式越复杂,导致一个表达式所占的内存就很高。