2016-11-09 61 views
-3

我试图解决的检测,对此我有以下代码三角类型Hackerrank问题:SQL:无法理解CASE语法

SELECT A,B,C FROM TRIANGLES 
    CASE 
     WHEN (A >= B + C) OR (B >= A + C) OR (C >= A + B) THEN "Not A Triangle" 
     WHEN A = B AND B = C THEN "Equilateral" 
     WHEN (A = B AND B = C) OR (B = C AND C = A) OR (C = A AND A = B) THEN "Isosceles" 
     ELSE "Scalene" 
    END; 

但它不工作:

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CASE 
     WHEN (A >= B + C) OR (B >= A + C) OR (C >= A + B) THEN "Not A Trian' at line 2 
+0

你错误地使用'CASE'。你想达到什么目的? –

+0

大小写必须是select或where子句的一部分 – Jens

+0

这不是它无法理解的语法,是您使用它的错误。在'FROM' – Lamak

回答

0

不知道你打算做,但这应该工作:

SELECT A,B,C , 
     CASE 
      WHEN (A >= B + C) OR (B >= A + C) OR (C >= A + B) THEN 'Not A Triangle' 
      WHEN A = B AND B = C THEN 'Equilateral' 
      WHEN (A = B AND B = C) OR (B = C AND C = A) OR (C = A AND A = B) THEN 'Isosceles' 
      ELSE 'Scalene' 
     END 
FROM TRIANGLES 

你有两个错误,第一,字符串必须用单引号包裹,双引号用于列名。其次,语法是:

SELECT <columns> 
FROM <Table> 
WHERE <Filters> 
+0

只是澄清一点 - 单引号是用于分隔字符串的SQL标准,但MySQL确实支持双引号。对于列和表名称,它应该使用反引号而不是单引号。 – PaulF

2

我想你想你的输出是这样的:

A B C TYPE 
6 2 3 Not a Triangle 
3 3 3 Equilater 

等等...

试试这个:

SELECT A,B,C, 
CASE 
    WHEN (A >= B + C) OR (B >= A + C) OR (C >= A + B) THEN "Not A Triangle" 
    WHEN A = B AND B = C THEN "Equilateral" 
    WHEN (A = B AND B = C) OR (B = C AND C = A) OR (C = A AND A = B) THEN "Isosceles" 
    ELSE "Scalene" 
END AS type 
FROM TRIANGLES