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;