2014-12-29 3 views
1

나는 MySQL (v5.6.13)에서 IF 문을 성공시키지 않고 작업하려고 노력 해왔다. 나는 결국 여전히 작동하지 않는, 아래의 간단한 예제로 다시 내 코드를 깎았 다했습니다MySQL IF ... THEN 문법 오류

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 'IF 10>1 THEN 
    SELECT 10' at line 1 

궁금했던 :

IF 10>1 THEN 
    SELECT 10; 
END IF; 

내가 이것을 실행하면, 그것은 나에게 다음과 같은 오류를 제공합니다 그것은 내가 사용하고있는 MySQL 클라이언트 (Sequel Pro)와 관련이 있는지 여부와 관계없이 명령 행에서 정확히 동일한 메시지를 실행합니다.

내가 볼 수없는 엄청나게 단순한 실수를하고 있습니까? 또는 오류를 일으킬 수있는 원인에 대한 제안이있는 사람이 있습니까? 어떤 도움이라도 감사하게 받아 들여질 것입니다!

+6

저장 프로 시저, 함수 및 트리거와 같은 프로그램 블록에서만 'if'를 사용할 수 있습니다. 다른 상황에서는 인식되지 않습니다. –

+0

그러나 인라인 if 문이 있습니다. 좋은 예가 있습니다. http://timmurphy.org/2009/08/13/inline-if-and-case-statements-in-mysql/ –

+0

고맙습니다. @GordonLinoff - 매우 도움이됩니다. 지금이 시점에서 문서를 읽으면이 지점이 이해할 만하다. 그러나 특히 명확하지는 않다 (잘, IMO!). – HaydnW

답변

3

@Gordon Linoff's comment에 표시된 바와 같이, MySQL의 IF statementstored programs (즉 특정 조건에 대한 응답으로 MySQL에 저장되고 그 다음 호출되는 코드) 내에서만 유효합니다. 즉, 시도하는 방식으로 사용할 수 없습니다.

그러나 IF을 SQL에서 사용하려면이 필요합니다. 이 절차 언어에 익숙한 사람들에게 생소 할 수 있습니다

(— 따라서 제어 흐름 구조처럼 실행하는 하나의 코드가 알고리즘 및 공정 단계를 설명하는 "; 다음 중 & hellip; 경우 중 & hellip 다른"헤아릴 수 있습니다) 그러나 SQL은 선언문입니다. 코드는 원하는 결과를 나타내고 이 아니며 그 결과는 어떻게 얻어야합니까? — 따라서 제어 흐름 구성을 사용하려는 시도는 언어 오해에서 거의 발생합니다.

는 예를 들면, 절차 형 언어에 하나의 비교를 수행하기 위해 컴퓨터를 알 수있는 결과는 특정 기준에 부합하는 경우의 출력을 다음 값을 결과를 검사하고 : 반대로

for each x in Set 
    if x < 10 then 
    output x 

를 (A)에, SQL에서,

output x from Set if x < 10 

을 또는 : 선언적 언어 하나 하나가 무엇을 원하는지 결과 컴퓨터를 알려줍니다

SELECT column_name FROM table_name WHERE column_name < 10