SQL三角形类型判断查询语句报错:语法错误位于=前的问题排查
排查与修正你的三角形类型判断SQL语句
首先,你的语句里有几个关键的语法和逻辑问题,我来逐一拆解并修正:
错误的多值比较写法
SQL不支持a=b=c或者a<>b<>c这种连续比较的语法,必须用AND来连接多个独立的比较条件:- 等边三角形的正确写法是
a = b AND b = c - 不等边三角形需要同时判断三边两两不等:
a <> b AND b <> c AND a <> c
- 等边三角形的正确写法是
条件顺序逻辑颠倒
判断「不是三角形」的条件必须放在最前面!如果三条边连三角形的基本要求都不满足,后面的类型判断完全没有意义。而且还要补充另外两组边的判断:(a+c) <= b和(b+c) <= a,只要满足其中一个就不是有效三角形。列别名重复混淆
你用了t_name作为结果列的别名,但原表已经有t_name列,这会导致命名混淆,建议改成t_type更清晰。等腰与等边的优先级问题
等边三角形是等腰三角形的特殊情况,必须把等边的判断放在等腰前面,否则等边的情况会被先判定为等腰,得不到正确结果。
修正后的完整SQL语句如下:
SELECT t_name, CASE WHEN (a + b) <= c OR (a + c) <= b OR (b + c) <= 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 AS t_type FROM triangles;
逻辑说明:
- 先校验三角形的核心规则:任意两边之和必须大于第三边(用
<=覆盖了退化三角形的情况) - 再判断最特殊的等边三角形
- 接着判断等腰三角形(任意两边相等)
- 最后默认返回不等边三角形(三边两两不等)
这样既解决了语法错误,也修正了逻辑漏洞,能正确处理所有边界情况。
内容的提问来源于stack exchange,提问作者Pavi Thran
相关产品推荐
相关产品推荐

