2016-11-09 3 views
-3

Я пытаюсь решить проблему Hackerrank обнаружения типа треугольника, для которого у меня есть следующий код:SQL: не могу понять СЛУЧАЙ синтаксис

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 where – Jens

+0

, что не то, что он не может понять синтаксис, заключается в том, что вы используете его неправильно. Вы не можете просто добавить это выражение 'CASE' после' 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 
Смежные вопросы