[SQL] 어떻게 제대로 MySQL의에서 CASE..WHEN 사용합니까
SQL어떻게 제대로 MySQL의에서 CASE..WHEN 사용합니까
다음은 데모 쿼리입니다, 그것은 매우 간단 통지 BASE_PRICE 0 만 페치, 그리고 아직도, 그것은 조건 3을 선택합니다 :
SELECT
CASE course_enrollment_settings.base_price
WHEN course_enrollment_settings.base_price = 0 THEN 1
WHEN course_enrollment_settings.base_price<101 THEN 2
WHEN course_enrollment_settings.base_price>100 AND
course_enrollment_settings.base_price<201 THEN 3
ELSE 6
END AS 'calc_base_price',
course_enrollment_settings.base_price
FROM
course_enrollment_settings
WHERE course_enrollment_settings.base_price = 0
BASE_PRICE 소수점이다 (8,0)
내 DB에서이 프로그램을 실행할 때, 내가 얻을 :
해결법
-
==============================
1.CASE 직후 course_enrollment_settings.base_price을 제거합니다 :
CASE 직후 course_enrollment_settings.base_price을 제거합니다 :
SELECT CASE WHEN course_enrollment_settings.base_price = 0 THEN 1 ... END
매뉴얼에 설명 된대로 CASE는 두 가지 형태가있다. 당신은 검색 조건을 사용하고 있기 때문에 여기에서는 두 번째 양식을합니다.
-
==============================
2.
CASE case_value WHEN when_value THEN statements [WHEN when_value THEN statements] ELSE statements END
또는:
CASE WHEN <search_condition> THEN statements [WHEN <search_condition> THEN statements] ELSE statements END
여기 CASE 2 차 시나리오 search_condition과의 표현식이 평가하는 것이다 아무하는 search_condition이없는 경우 동일 한 후 다른 실행
SELECT CASE course_enrollment_settings.base_price WHEN course_enrollment_settings.base_price = 0 THEN 1
해야한다
SELECT CASE WHEN course_enrollment_settings.base_price = 0 THEN 1
-
==============================
3.사례 course_enrollment_settings.base_price는 경우를해야합니다, 여기에 잘못
사례 course_enrollment_settings.base_price는 경우를해야합니다, 여기에 잘못
SELECT CASE WHEN course_enrollment_settings.base_price = 0 THEN 1 WHEN course_enrollment_settings.base_price<101 THEN 2 WHEN course_enrollment_settings.base_price>100 AND course_enrollment_settings.base_price<201 THEN 3 ELSE 6 END AS 'calc_base_price', course_enrollment_settings.base_price FROM course_enrollment_settings WHERE course_enrollment_settings.base_price = 0
일부 설명. 원래 쿼리는 다음과 같이 실행됩니다 :
SELECT CASE 0 WHEN 0=0 THEN 1 -- condition evaluates to 1, then 0 (from CASE 0)compares to 1 - false WHEN 0<1 THEN 2 -- condition evaluates to 1,then 0 (from CASE 0)compares to 1 - false WHEN 0>100 and 0<201 THEN 3 -- evaluates to 0 ,then 0 (from CASE 0)compares to 0 - true ELSE 6, ...
당신은 항상 3를 얻을 이유입니다
-
==============================
4.
SELECT CASE WHEN course_enrollment_settings.base_price = 0 THEN 1 WHEN course_enrollment_settings.base_price>0 AND course_enrollment_settings.base_price<=100 THEN 2 WHEN course_enrollment_settings.base_price>100 AND course_enrollment_settings.base_price<201 THEN 3 ELSE 6 END AS 'calc_base_price', course_enrollment_settings.base_price FROM course_enrollment_settings WHERE course_enrollment_settings.base_price = 0
-
==============================
5.이 사례의 두 가지 변종이 있고, 당신은 당신이 생각하는 하나를 사용하지 않는.
이 사례의 두 가지 변종이 있고, 당신은 당신이 생각하는 하나를 사용하지 않는.
CASE case_value WHEN when_value THEN statement_list [WHEN when_value THEN statement_list] ... [ELSE statement_list] END CASE
각 조건이있는 경우 (case_value == when_value) (의사 코드)에 느슨하게 동일하다.
그러나 같은 선도 when_value로 전체 조건을 넣어했습니다 :
if (case_value == (case_value > 100))
이제 (case_value> 100) FALSE로 평가하고, 당신의 조건의 하나는 그렇게 할 수 있습니다. 그래서, 지금 당신은 :
if (case_value == FALSE)
그 결과 전체 표현을 통해 FALSE 0으로 변환하고, 경우 (case_value == 0) 당신은 지금 왜 세 번째 조건 화재를 볼 수 있습니다.
MySQL은 당신이 CASE의 두 번째 변종을 사용하려는 것을 알고 원인, 더 case_value 없다 그래서 처음 course_enrollment_settings 드롭 :
CASE WHEN search_condition THEN statement_list [WHEN search_condition THEN statement_list] ... [ELSE statement_list] END CASE
지금 당신은 search_condition과 같이 전체 조건문을 제공 할 수 있습니다.
또한, 당신이 사용하는 기능에 대한 설명서를 읽어 보시기 바랍니다.
-
==============================
6.나는 그것의 부분은 당신이 CASE를 사용하는 두 가지 방법의 조합이다, 나중에 언제가 X = Y 구문을 사용하여 다음 CASE 후 당신에게있는 거 선택을 값을 진술하고 있다는 것을 생각합니다. 그것은이어야한다
나는 그것의 부분은 당신이 CASE를 사용하는 두 가지 방법의 조합이다, 나중에 언제가 X = Y 구문을 사용하여 다음 CASE 후 당신에게있는 거 선택을 값을 진술하고 있다는 것을 생각합니다. 그것은이어야한다
CASE X WHEN a THEN ... WHEN b THEN ...
또는
CASE WHEN x = a THEN ... WHEN x = b THEN ...
from https://stackoverflow.com/questions/9588015/how-do-i-use-properly-case-when-in-mysql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 는 SQL Server의 "IN"절 제한 (0) | 2020.05.25 |
---|---|
[SQL] '와'... 이전 문 키워드 근처의 구문이 잘못은 세미콜론으로 종료되어야합니다 (0) | 2020.05.25 |
[SQL] 사슬로 매인 선택 박스 (국가, 주, 도시) (0) | 2020.05.25 |
[SQL] 어떻게 데이터베이스 데이터와의 TableView를 채우기 위해 (0) | 2020.05.25 |
[SQL] 데이터베이스 MySQL을 PDO 연결 [중복] (0) | 2020.05.25 |