MYSQL选择查询为输出返回NULL的情况

时间:2017-04-12 07:07:02

标签: mysql

在查询基于以下参数对表中的条目进行分类时运行嵌套大小写。运行代码时,Null的输出会返回select case when a+b > c and b+c > a and c+a > b then case when a=b|a=c|b=c then "Isosceles" when a=b and a=c and b=c then "Equilateral" when a<>b and b<>c and a<>c then "Scalene" end else "Not A Triangle" end from triangles 。我不知道为什么。我正在比较整数a,b和c,它们代表三角形的每个不同整数的列。

有什么建议吗?

{{1}}

2 个答案:

答案 0 :(得分:1)

第一个问题:对||使用双管OR而不是单个管道。

第二个问题:在Equilateral之前使用Isosceles条件  因此,如果您的身边是222,那么根据您的逻辑,Isosceles条件首先满足。所以永远不会将它等同于Equilateral

新答案:事实上,您不需要2个案例陈述。请改用

http://rextester.com/PTDI48631

select t.*,
case when not (a+b > c and b+c > a and c+a > b)  
        then "Not A Triangle"
     when (a=b and a=c and b=c) 
         then "Equilateral"
     when (a=b or a=c or b=c) 
         then "Isosceles"
     else "Scalene"
end as Triangle_type
from triangle t;

上一个答案: http://rextester.com/ELLB75736

select t.*,
case  when a+b > c and b+c > a and c+a > b 
then
(case 
    when a=b and a=c and b=c then "Equilateral"
    when a=b or a=c or b=c then "Isosceles"
    when a<>b and b<>c and a<>c then "Scalene"
    end
)
else 
"Not A Triangle"
end as Triangle_type
from triangle234 t

答案 1 :(得分:0)

select case when a+b > c and b+c > a and c+a > b then 
case 
    when (a=b & a=c)|(a=b & b=c) | (a=c & b=c) then "Isosceles"
    when a=b and a=c and b=c then "Equilateral"
    when a<>b and b<>c and a<>c then "Scalene"
    Else "Triangle"
end
else "Not A Triangle"
end 
from triangles

试试上面的代码。我认为您错过else内部WHEN。 希望这会有所帮助。