订阅更新

计算布尔表达式:变量表关联两次

SQL 实战 123 题 · 第 109 题 中等 约 2 分钟读完

LeetCode 1440 · 同一张表关联多次、CASE 分支

本文目录
  1. 面试怎么回答
  2. 题意
  3. 表结构
  4. 思路
  5. 参考解法
  6. 易错点

面试怎么回答

表达式表分别按左、右操作数关联变量表两次(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

易错点

  • 只关联一次变量表,左右操作数只能取到一个值。
刷题进度保存在当前浏览器