A 테이블에는 1,2,3,4,5,6
B 테이블에는 2,3
C 테이블에는 3,4
A테이블에서 B, C 테이블의 중복되는 데이터 제외하고 1, 5, 6 만 조회를 하고 싶습니다.
SELECT *
FROM A
WHERE NOT EXISTS (SELECT 1 FROM B WHERE B.NO = A.NO)
AND NOT EXISTS (SELECT 1 FROM C WHERE C.NO = A.NO)
NOT EXISTS 두번 사용 시 Subquery returned multiple rows where a scalar value was expected. 오류가 발생합니다.
오류 없이 A테이블의 1, 5, 6 만 조회 하는 방법이 있을까요?
WITH A AS ( SELECT 1 NO FROM DUAL UNION ALL SELECT 2 NO FROM DUAL UNION ALL SELECT 3 NO FROM DUAL UNION ALL SELECT 4 NO FROM DUAL UNION ALL SELECT 5 NO FROM DUAL UNION ALL SELECT 6 NO FROM DUAL ) , B AS ( SELECT 2 NO FROM DUAL UNION ALL SELECT 3 NO FROM DUAL ) , C AS ( SELECT 3 NO FROM DUAL UNION ALL SELECT 4 NO FROM DUAL ) SELECT * FROM A WHERE NOT EXISTS (SELECT 1 FROM B WHERE B.NO = A.NO) AND NOT EXISTS (SELECT 1 FROM C WHERE C.NO = A.NO) ;
예제 쿼리로는 에러가 없는데요? 실제 쿼리의 Select 절에 사용된 함수등이 문제인것 같네요..
exists 문제가 아니고 다른 조건의 서브쿼리에서 여러건이 리턴되어 그런듯 합니다. 앗 먼저 답변 주셨군요.
panama 님 말씀처럼 다른곳 조건에서 오류가 발생한거 같습니다. 고맙습니다.
전체 쿼리중에 포함되어 있는 다른 서브쿼리 확인하세요.
- Select 절의 서브쿼리
- Where 절의 서브쿼리 중 IN 이나 EXISTS 가 아닌 다른 조건의 서브쿼리
에러 메시지 그대로 입니다.
- 단일 결과를 리턴해야 할 서브쿼리에서 다중 결과 리턴