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)가됩니다. 누군가에게 도움이되기를 바랍니다.
'Development Tip' 카테고리의 다른 글
SQL Server 커서에서 여러 값 가져 오기 (0) | 2020.11.07 |
---|---|
두 날짜 간의 시간 차이를 분 단위로 계산 (0) | 2020.11.07 |
VS2008에서 "대상 어셈블리에 서비스 유형이 없습니다"오류 메시지를 제거하려면 어떻게해야합니까? (0) | 2020.11.07 |
jQuery는 ID / 값을 얻습니다. (0) | 2020.11.07 |
C ++ 문자열의 문자 정렬 (0) | 2020.11.07 |