마리아에서 조건부로 말하면.DB
EMP_TABLE의 주요 4개 컬럼을 사용하고 있습니다.
EMP_NAME EMP_ID EMP_DEPT JOIN_DATE
일반적인 요건은 EMP_DEPT = 'HR' 레코드만 가져오는 것입니다.그러나 테이블에서 EMP_DEPT = 'HR' 레코드를 사용할 수 없는 경우, EMP_DEPT = 'DEV' 레코드를 EMP_TABLE에서 가져와야 합니다.우선권은 인사기록에 부여됩니다.
나는 그것이 내부 쿼리 또는 결합과 카운트를 사용하여 달성될 수 있다는 것을 안다.하지만 IF나 WHEN을 사용해서 가능한지 알고 싶습니다.다음 쿼리를 시도했지만 효과가 없는 것 같습니다.
select * from EMP_TABLE where if(EMP_DEPT='HR',EMP_DEPT='HR',EMP_DEPT='DEV');
이에 대한 어떤 도움도 감사합니다.
이 작업을 다음과 같이 수행합니다.
select e.*
from EMP_TABLE e
where (emp_dept = 'HR') or
(emp_dept = 'DEV' and
not exists (select 1 from emp_table e2 where e2.emp_dept = 'HR')
);
첫 번째 조건은 다음을 포함하는 모든 행을 반환합니다.'HR'
두 번째가 반환됩니다.'DEV'
단, 이 없는 경우에만'HR'
기록.
사용(또는 학습)하고 싶지 않은 경우if()
MySQL 확장자입니다.조건식의 기준은case
.
그런 다음 조건식을 포함하지 않는 것이 좋습니다.where
절을 참조하십시오.첫째, 최적화를 방해합니다.둘째, 대부분의 논리는 다음을 사용하여 표현될 수 있다.and
그리고.or
그 때문에, 그 조건에 추가의 「외부」가 도입되고 있습니다.
이것은, 다음의 행의 수에 근거하는 케이스로 실시할 수 있습니다.EMP_DEPT = 'HR'
; 카운트가 0이 아닌 경우 다음 값이 포함된 행을 반환합니다.EMP_DEPT = 'HR'
그렇지 않으면 행을 반환한다.EMP_DEPT = 'DEV'
.
SELECT *
FROM EMP_TABLE
WHERE EMP_DEPT = CASE WHEN (SELECT COUNT(*) FROM EMP_TABLE WHERE EMP_DEPT = 'HR') > 0 THEN 'HR' ELSE 'DEV' END
언급URL : https://stackoverflow.com/questions/57406720/if-condition-in-where-clause-in-mariadb
'programing' 카테고리의 다른 글
Node.js를 시작하려면 어떻게 해야 하나요? (0) | 2022.11.27 |
---|---|
그룹별로 N개의 결과를 얻기 위해 GROUP BY 내의 LIMIT를 사용합니까? (0) | 2022.11.27 |
Java 9 이후로 이행할 때 모듈로 전환할 필요가 있습니까? (0) | 2022.11.27 |
생성된 URL의 "public/index.php"를 삭제하려면 어떻게 해야 합니까? (0) | 2022.11.27 |
사전에서 요소 삭제 (0) | 2022.11.27 |