Sql 显示三角形的类型
这就是问题所在: 我尝试过这个解决方案:Sql 显示三角形的类型,sql,oracle,Sql,Oracle,这就是问题所在: 我尝试过这个解决方案: SELECT CASE WHEN (A+B) <= C OR (B+C) <= A OR (C+A) <= B THEN 'Not A Triangle' WHEN A = C OR A = B OR B = C THEN 'Isoceles' WHEN A = C AND A = B THEN 'Equilateral' ELSE 'Scalene'
SELECT
CASE
WHEN (A+B) <= C OR (B+C) <= A OR (C+A) <= B THEN 'Not A Triangle'
WHEN A = C OR A = B OR B = C THEN 'Isoceles'
WHEN A = C AND A = B THEN 'Equilateral'
ELSE 'Scalene'
END
FROM TRIANGLES;
我觉得这两种解决方案都是一样的,只是交换了操作数的一侧,同时我还适当地更改了运算符,以便不改变其含义。有人能解释一下为什么解决方案1不起作用吗?这与运算符的方向和操作数的边无关。它不起作用,因为
CASE
语句的WHEN
子句顺序错误,因为它们将按顺序处理
您有以下订单:
当A=C或A=B或B=C时,则为“Isoceles”
当A=C和A=B时,则为“等边”
然后,如果A=C和A=B
为真,则A=C或A=B或B=C
也将为真,因此所有等边三角形将匹配为等参线
如果交换这些语句的顺序:
WHEN A = C AND A = B THEN 'Equilateral'
WHEN A = C OR A = B OR B = C THEN 'Isoceles'
那就行了
dbfiddle选择
案例
当A+B
WHEN A = C AND A = B THEN 'Equilateral'
WHEN A = C OR A = B OR B = C THEN 'Isoceles'
select
case
when A + B <= C or C + A <= B or C + B <= A then 'Not A Triangle'
when A = B and B = C then 'Equilateral'
when A <> B and B <> C and A <> C then 'Scalene'
when (A = B and C <> A) or (A = C and B <> A) or (B = C and A <> C) then 'Isosceles' END
from Triangles;