判断三角形类型的SQL代码未输出预期结果,是否存在错误?
代码问题说明
你的代码存在逻辑顺序错误,问题出在CASE语句的判断优先级设置错误:
- CASE语句会按从上到下的顺序匹配条件,命中第一个符合的条件后就会直接返回结果,不会继续校验后续条件
- 你当前把「三角形类型判断」放在了「是否为三角形的合法性判断」前面,会导致本身不满足三角形构成条件、但有两边长度相等的边长组被误判为等腰三角形
举个实际例子:边长为2、2、5的组合,两边之和2+2=4<5,本身不属于三角形,但代码会先匹配到A=B的条件,错误返回Isosceles,不会走到后续的非三角形判断逻辑。
修复方案
把三角形合法性判断放到最优先的位置,调整后的代码如下:
SELECT CASE WHEN ((A+B) <= C) OR ((A+C) <= B) OR ((C+B) <= A) THEN 'Not A Triangle' WHEN (A = B) AND (B = C) THEN 'Equilateral' WHEN (A = B) OR (B = C) OR (A = C) THEN 'Isosceles' ELSE 'Scalene' END FROM TRIANGLES;
注:此处将原判断的<调整为<=,是因为两边之和等于第三边时属于退化三角形,不符合普通三角形的构成要求,你可以根据实际业务规则调整边界条件。
内容的提问来源于stack exchange,提问作者Dexter
相关产品推荐
相关产品推荐

