programing

마리아에서 조건부로 말하면.DB

bestcode 2022. 11. 27. 11:35
반응형

마리아에서 조건부로 말하면.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

dbfiddle 데모

언급URL : https://stackoverflow.com/questions/57406720/if-condition-in-where-clause-in-mariadb

반응형