Development Tip

CASE 또는 IF ELSEIF가있는 MySQL select 문?

yourdevel 2020. 11. 7. 10:37
반응형

CASE 또는 IF ELSEIF가있는 MySQL select 문? 결과를 얻는 방법을 모름


두 개의 테이블이 있습니다. 하나는 제조업체 정보를 가지고 있으며 판매 할 수있는 지역을 포함합니다. 다른 하나는 판매용 제품을 가지고 있습니다. 우리는 지역에 따라 제품의 가시성을 제한해야합니다. 이것은 Netflix가 모든 곳 (1), 캐나다 (2), 미국 (3)에서만 볼 수있는 비디오를 시스템에 가지고있는 것과 같습니다.

제조업체 표의 설정을 기반으로 제품을 볼 수있는 위치를 알려주는 쿼리를 작성하려고합니다.

예를 들어, 제조업체 테이블에는 expose_new 및 expose_used라는 두 개의 필드가 있으며, 각각의 값은 1,2 또는 3으로 신규 또는 중고 비디오를 볼 수있는 위치를 제한합니다.

동영상이 추가 될 때 'expose'값이 할당되지 않으며 현재 제조업체의 expose_new 또는 expose_used 값에 따라 색인에 동영상을 추가 할 때 즉시 수행됩니다.

내가 얻고 자하는 것은 품목 세부 사항과 그것이 새 것인지 중고품인지에 따라 볼 수있는 곳에 대한 계산 된 값과 모든 신제품 또는 중고 제품에 대해 제조업체에 할당 된 규칙 / 값입니다. 조건부로 목록에 표시하려면 제품별로이 단일 숫자가 필요합니다.

다음은 작동하지 않지만 내가하려는 작업에 대한 아이디어를 얻을 수 있습니다. CASE 문과 다음 WRONG IF / ELSEIF 문으로 이것을 시도했습니다.

이것을 디버거하고 올바른 방향으로 안내하는 데 도움을 주시면 감사하겠습니다.

SELECT 
t2.company_name,
t2.expose_new,  // 1,2 or 3
t2.expose_used, // 1,2 or 3
t1.title,
t1.seller,
t1.status,  //can be new or used
(SELECT 
IF(status ='New',
  (select expose_new from manufacturers where id = t1.seller),1
)
ELSEIF(t1.status ='Used',
  (select expose_used from manufacturers where id = t1.seller),1
)
END IF
) as 'expose'
FROM `products` t1
join manufacturers t2 on t2.id = t1.seller
where t1.seller = 4238

다음은 실제로 실행되는 것처럼 보이지만 어떤 일이 발생하더라도 항상 첫 번째 값을 반환하는 CASE 버전입니다 (이 경우 1). 각 WHEN 문에서 AND를 사용하여 다른 테스트를 추가 할 수 있는지 확실하지 않지만 오류가 발생하지 않고 잘못된 결과 만 표시됩니다.

SELECT 
t2.company_name,
t2.expose_new,
t2.expose_used,
t1.title,
t1.status,
 CASE status
   when 'New' and t2.expose_new = 1 then 1
   when 'New' and t2.expose_new = 2 then 2
   when 'New' and t2.expose_new = 3 then 3
   when 'Used' and t2.expose_used = 1 then 1
   when 'Used' and t2.expose_used = 2 then 2
   when 'Used' and t2.expose_used = 3 then 3
END as expose
FROM `products` t1
join manufacturers t2 on t2.id = t1.seller
where t1.seller = 4238

이 쿼리를 시도하십시오-

SELECT 
  t2.company_name,
  t2.expose_new,
  t2.expose_used,
  t1.title,
  t1.seller,
  t1.status,
  CASE status
  WHEN 'New' THEN t2.expose_new
  WHEN 'Used' THEN t2.expose_used
  ELSE NULL
  END as 'expose'
FROM
  `products` t1
JOIN manufacturers t2
  ON
    t2.id = t1.seller
WHERE
  t1.seller = 4238

통사론:

CASE value WHEN [compare_value] THEN result 
[WHEN [compare_value] THEN result ...] 
[ELSE result] 
END

대안 : CASE WHEN [조건] THEN 결과 [WHEN [조건] THEN 결과 ...]

mysql> SELECT CASE  WHEN 2>3 THEN 'this is true' ELSE 'this is false' END; 
+-------------------------------------------------------------+
| CASE  WHEN 2>3 THEN 'this is true' ELSE 'this is false' END |
+-------------------------------------------------------------+
| this is false                                               | 
+-------------------------------------------------------------+

나는 사용하고있다 :

SELECT  act.*,
    CASE 
        WHEN (lises.session_date IS NOT NULL AND ses.session_date IS NULL) THEN lises.location_id
        WHEN (lises.session_date IS NULL AND ses.session_date IS NOT NULL) THEN ses.location_id
        WHEN (lises.session_date IS NOT NULL AND ses.session_date IS NOT NULL AND lises.session_date>ses.session_date) THEN ses.location_id
        WHEN (lises.session_date IS NOT NULL AND ses.session_date IS NOT NULL AND lises.session_date<ses.session_date) THEN lises.location_id
    END AS location_id
FROM activity AS act
LEFT JOIN li_sessions AS lises ON lises.activity_id = act.id AND  lises.session_date >= now()
LEFT JOIN session AS ses ON  ses.activity_id = act.id AND  ses.session_date >= now()
WHERE act.id

이를 수행하는 또 다른 방법은 중첩 된 IF 문을 사용하는 것입니다. 회사 테이블이 있고 그 안에있는 레코드 수를 세고 싶다고 가정합니다. 샘플 쿼리는 다음과 같습니다.

SELECT IF(
      count(*) > 15,
      'good',
      IF(
          count(*) > 10,
          'average',
          'poor'
        ) 
      ) as data_count 
      FROM companies

여기서 두 번째 IF 조건은 첫 번째 IF 조건이 실패 할 때 작동합니다. 따라서 IF 문의 샘플 구문은 IF (CONDITION, THEN, ELSE)가됩니다. 누군가에게 도움이되기를 바랍니다.

참고URL : https://stackoverflow.com/questions/8600671/mysql-select-statement-with-case-or-if-elseif-not-sure-how-to-get-the-result

반응형