SAP BASIC
[11] ABAP OPEN SQL - WHERE EXISTS, WHERE NOT EXISTS
0v0_삐약
2024. 8. 23. 10:52
728x90
개발 중 exists와 not exists 를 사용했는데, 예상과 다르게 데이터가 출력되어
두 구문에 대해 작성해본다!

1. WHERE NOT EXSITS
SELECT *
FROM scarr
WHERE CARRID IN ( 'AA', 'AB', 'AC', 'AD' )
INTO TABLE @DATA(lt_itab).
SELECT a~*
FROM scarr AS a INNER JOIN @lt_itab AS b ON a~CARRID = b~CARRID
WHERE NOT EXISTS ( SELECT *
FROM scarr
WHERE CARRID EQ 'CO' )
INTO TABLE @DATA(lt_scarr).
SCARR에서 CARRID 가 'AA', 'AB', 'AC', 'AD인 것을 출력했다
예상 결과 : CARRID 가 AA, AB, AC, AD인 것 중에서 (sub query) Carrid 가 CO가 아닌 것을 출력!
=> AA, AB, AC, AD가 나오겠지?
실제 결과 : 아무것도 안나옴...
이유?
WHERE NOT EXISTS 의 의미!
- WHERE NOT EXISTS 쿼리의 반환값이 존재한다면 ? FALSE( select X), 존재하지 않으면 TRUE (select)
=> 서브쿼리의 반환값이 존재하냐 존재하지 않냐로 TRUE / FALSE 결과가 나오고, 그에 따라 셀렉트 하냐 마냐가 결정됨
NOT IN 의 의미가 아니다 ㅎㅎㅎ
테스트: CARRID = 'KKK' (존재하지 않는 값)으로 테스트
SELECT a~*
FROM scarr AS a INNER JOIN @lt_itab AS b ON a~CARRID = b~CARRID
WHERE NOT EXISTS ( SELECT *
FROM scarr
WHERE CARRID EQ 'KKK' )
INTO TABLE @DATA(lt_scarr).
결과 : 서브쿼리의 결과가 존재하지 않기 때문에 TRUE => Select 한다!
2. WHERE EXISTS
- WHERE NOT EXISTS와 반대로,
쿼리의 반환값이 존재한다면 ? TRUE( select ), 존재하지 않으면 FALSE (select X )
SELECT a~*
FROM scarr AS a INNER JOIN @lt_itab AS b ON a~CARRID = b~CARRID
WHERE EXISTS ( SELECT *
FROM scarr
WHERE CARRID EQ 'KKK' )
INTO TABLE @DATA(lt_scarr).
KKK인 CARRID가 존재하지 않음 => FALSE => SELECT X
결과 :
728x90