it-source

Oracle에서 Select Exists를 사용하는 방법?

criticalcode 2023. 10. 18. 22:12
반응형

Oracle에서 Select Exists를 사용하는 방법?

아래에 해당하는 것은 무엇입니까?

SELECT CAST(
   CASE WHEN EXISTS(SELECT * FROM theTable where theColumn like 'theValue%') THEN 1 
   ELSE 0 
   END 
AS BIT)

나는 단지 위와 같이 존재하는 오라클 쿼리를 사용하고 그것이 0 또는 1을 반환하기를 원합니다.

이와 동등한 것은 다음과 같습니다.

select count(*) 
from dual 
where exists (SELECT * FROM theTable where theColumn like 'theValue%')

이렇게 하면 동일한 출력이 표시됩니다.방금 제거했습니다.CAST그리고 a를 추가했습니다.FROM dual오라클이 다음과 같은 질문을 허용하지 않기 때문에SELECT그리고 없는FROM:

SELECT 
   CASE WHEN EXISTS(SELECT * FROM theTable where theColumn like 'theValue%') 
     THEN 1 
     ELSE 0 
   END 
FROM dual ;

SQL-Fiddle에서 테스트 완료

쓸 수 있습니다.

SELECT COUNT(*) FROM theTable WHERE theColumn LIKE 'theValue%' AND ROWNUM = 1

이것은 돌아올 것입니다.0-1그리고 최적화자는 쿼리가 첫 번째 행 액세스에 최적화되도록 합니다.

MAX를 CASE와 함께 사용할 수도 있습니다.

SELECT MAX(
   CASE 
     WHEN theColumn like 'theValue%' THEN 1 
   ELSE 
     0 
   END)  
AS BIT
FROM theTable

다음 쿼리 중 하나를 사용할 수 있습니다. (첫 번째 쿼리가 더 성능이 뛰어납니다.)

SELECT H.TABLE_ID, H.OTHER_FIELD, 
(SELECT 'YES' FROM DUAL WHERE EXISTS (SELECT  'X' FROM TABLE_DETAIL DT
WHERE DT.TABLE_ID = H.TABLE_ID) ) WITH_DETAIL FROM TABLE_HEADER H; 

SELECT H.TABLE_ID, H.OTHER_FIELD, 
CASE WHEN EXISTS(SELECT * FROM IMTS.DETAIL_TABLE DT WHERE DT.TABLE_ID=H.TABLE_ID)  
THEN 'Y' ELSE 'N' END WITH_DETAIL FROM HEADER_TABLE H; 
SELECT H.TABLE_ID, H.OTHER_FIELD, NVL2(DT.SOME_NOTNULL_FIELD, 'YES','NO') WITH_DETAIL
FROM TABLE_HEADER H
LEFT JOIN TABLE_DETAIL DT ON DT.TABLE_ID=H.TABLE_ID AND ROWNUM<2; 

언급URL : https://stackoverflow.com/questions/16562162/how-to-use-select-exists-in-oracle

반응형