MySQL 쿼리에서 IF ELSE 문을 작성하는 방법


87

MySQL 쿼리에서 IF ELSE 문을 어떻게 작성합니까?

이 같은:

mysql_query("...(irrelevant code).. IF(action==2&&state==0){state=1}");

그런 다음 내 배열에서 다음을 수행 할 수 있어야합니다.

 $row['state'] 
//this should equal 1, the query should not change anything in the database, 
//just the variable for returning the information

답변:


151

CASE 을 사용하고 싶을 것입니다 .

그들은 다음과 같이 보입니다 :

SELECT col1, col2, (case when (action = 2 and state = 0) 
 THEN
      1 
 ELSE
      0 
 END)
 as state from tbl1;

1
감사합니다. 귀하의 답변은 따라 가기가 더 쉬워 보였습니다. (쿼리에 들어가야하는 경우에는 제대로 작동하지 않았습니다. "SELECT *, N.id (CASE WHEN (N. action == 2 AND N.state == 0) THEN 1 ELSE 0 END) AS N.state FROM 알림 N, 게시물 P WHERE N.userID = '$ session'AND N.uniqueID = P.id AND P.state = '0'AND N.action = '1'ORDER BY N.date DESC "
Dylan Cross

2
당신 같은 @DylanCross 룩 사이에 쉼표를 누락 될 수 있습니다 N.id(CASE WHEN ...
잭 에드 먼

1
아, 못 봤는데 쉼표를 넣어도 안되네요.
Dylan Cross

@DylanCross 또한 변경해야 할 수 있습니다 AS N.stateAS state.
Jack Edmonds

8
@DylanCross MySQL 은 비교 =대신 사용 하지 ==않습니까?
Jack Edmonds

29

C / PHP 스타일이 아닌 SQL로 작성해야합니다.

IF( action = 2 AND state = 0, 1, 0 ) AS state

쿼리에 사용

IF ( action = 2 AND state = 0 ) THEN SET state = 1

저장 프로 시저 또는 함수에 사용


내 코드와 함께 작동하도록 할 수 없습니다. 아마도 내 배치가 잘못되었거나 뭔가 : SELECT *, N.id IF (N.action = 2 AND N.state = 0, 1, 0) AS N.state FROM 알림 N, 게시물 P WHERE N.userID = '$ session'AND N.uniqueID = P.id AND P.state = '0'AND N.action = '1'ORDER BY N.date DESC
Dylan Cross

15

당신은 찾고 있습니다 case:

case when action = 2 and state = 0 then 1 else 0 end as state

MySQL에는 if구문 ( if(action=2 and state=0, 1, 0))이 있지만 case더 보편적입니다.

as state열에 별칭 을 지정하는 것뿐입니다. 이것이 SQL 쿼리의 열 목록에 있다고 가정합니다.


이것은 훨씬 더 좋은 답변입니다
bretterer

15
SELECT col1, col2, IF( action = 2 AND state = 0, 1, 0 ) AS state from tbl1;

또는

SELECT col1, col2, (case when (action = 2 and state = 0) then 1 else 0 end) as state from tbl1;

두 결과 모두 동일합니다 ....


내가 알아 차 렸지만 문서를 찾을 수 없었던 한 가지는 IF가 열 목록에서 마지막이어야한다는 것입니다. 첫 번째 인 경우 오류가 발생합니다. 누구든지 문서에서 이것을 볼 수 있는지 알고 있습니까? 그것은 나를 미치게 만든다. 내가 뭔가를 발견 할 때, 나는 그것이 미래의 참조를 위해 문서화 된보고 싶다
carinlynchin

8

mySQL 참조 매뉴얼에 따르면 if 및 else 문 사용 구문 :

IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list] ...
[ELSE statement_list]
END IF

따라서 귀하의 쿼리와 관련하여 :

x = IF((action=2)&&(state=0),1,2);

또는 사용할 수 있습니다

IF ((action=2)&&(state=0)) then 
state = 1;
ELSE 
state = 2;
END IF;

이 링크에 좋은 예가 있습니다. http://easysolutionweb.com/sql-pl-sql/how-to-use-if-and-else-in-mysql/


2
솔루션에 대한 링크는 환영하지만 답변이없는 경우에도 유용한 지 확인하십시오 . 링크 주변에 컨텍스트를 추가 하여 동료 사용자가 그것이 무엇인지, 왜 거기에 있는지 알 수 있도록 한 다음 페이지에서 가장 관련성이 높은 부분을 인용하십시오. 대상 페이지를 사용할 수없는 경우 다시 연결합니다. 링크에 불과한 답변은 삭제 될 수 있습니다.
MAR
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.