计算布尔表达式:变量表关联两次
LeetCode 1440 · 同一张表关联多次、CASE 分支
面试怎么回答
表达式表分别按左、右操作数关联变量表两次(v1、v2),再 CASE operator WHEN '>' THEN v1.value > v2.value ... 输出 true / false。同一维度表在一条查询里扮演不同角色时,就要关联多次并用别名区分。
先把这段讲顺;面试官追问时,再展开下面的原理和细节。
详细讲解
题意
变量表存了变量名和值,表达式表每行是「左变量、运算符(< > =)、右变量」。计算每个表达式的真假,输出 true 或 false。
表结构
- Variables:name(主键)、value
- Expressions:left_operand、operator、right_operand;三列联合主键
思路
左右两个操作数都要去变量表里取值,所以变量表要关联两次,分别起不同别名。拿到两个值后,用 CASE 按运算符分支比较。
参考解法
select e.left_operand,e.operator,e.right_operand,
case e.operator
when '>' then if(v1.value>v2.value,'true','false')
when '<' then if(v1.value<v2.value,'true','false')
else if(v1.value=v2.value,'true','false')
end value
from Expressions e
left join Variables v1 on v1.name = e.left_operand
left join Variables v2 on v2.name = e.right_operand
易错点
- 只关联一次变量表,左右操作数只能取到一个值。