[퀴즈] 조건을 만족하는 자료가 없을 때 특정값을 조회하기 1 6 8,047

by 마농 아우터조인 [2009.12.02 18:00:22]


[퀴즈] 조건을 만족하는 자료가 없을 때 특정값을 조회하기

다음 쿼리를 실행하면 v_deptno 의 값에 따라 아래 결과가 나오게 됩니다.

SELECT deptno
     , ename
  FROM scott.emp
 WHERE deptno = :v_deptno
;

1. v_deptno = 10

    DEPTNO ENAME
---------- ----------
        10 CLARK
        10 KING
        10 MILLER

2. v_deptno = 40

선택된 레코드가 없습니다.


----------------------------------------------------------------------
문제) 조건을 만족하는 자료가 없을 때 다음과 같은 결과가 나오도록 쿼리를 변경하세요

    DEPTNO ENAME
---------- ----------------------------------
        40 조건을 만족하는 데이터가 없습니다.

[정답보기] <=== 트리플클릭
SELECT :v_deptno deptno
     , NVL(ename, '조건을 만족하는 데이터가 없습니다.') ename
  FROM scott.emp
 RIGHT OUTER JOIN dual
    ON deptno = :v_deptno
;

by 이재현 [2009.12.02 20:20:07]
어...어렵다..;;

by 서성우 [2009.12.03 09:29:51]
SELECT Nvl(a.deptno,b.deptno) deptno
,Nvl(a.ename,'조건을 만족하는 데이터가 없습니다.') ename
FROM scott.emp a,
(SELECT 40 as deptno FROM dual) b
WHERE a.deptno (+)= b.deptno

요런 방식으로 처리 하면 될 것같은데...
정답이 맞을지는....

by 서성우 [2009.12.03 09:32:24]
이런 또 정답과는 멀어지는 ㅠ.ㅠ

by 손님 [2009.12.03 09:53:08]
친절히 태그 힌트로 아우터조인이라 적어줬는데..^^; 좀 어거지같지만

SELECT
DEPTNO
, DECODE(CNT, 0, '선택된 레코드가 없습니다.', ENAME) ENAME
FROM (
SELECT DEPTNO, ENAME, COUNT(*) OVER() CNT
FROM SCOTT.EMP
WHERE DEPTNO = &DEPTNO
UNION
SELECT &DEPTNO, DECODE(COUNT(*), 0, '0', '1') , COUNT(*)
FROM EMP
WHERE DEPTNO = &DEPTNO
)
WHERE ENAME <> '1'

by 마농 [2009.12.03 13:57:05]
말씀하신대로 어거지스럽네요^^ 간략하게 보완해 봤습니다.
SELECT deptno
, ename
FROM scott.emp
WHERE deptno = :v_deptno
UNION ALL
SELECT :v_deptno deptno
, '조건을 만족하는 데이터가 없습니다.' ename
FROM scott.emp
WHERE deptno = :v_deptno
HAVING COUNT(*) = 0
;

by f [2010.03.15 13:31:23]

SELECT NVL(T1.DEPTNO, T2.DEPTNO) AS DEPTNO, NVL(T1.ENAME, T2.ENAME) AS ENAME
FROM (
SELECT DEPTNO, ENAME
FROM EMP
WHERE DEPTNO = :DEPT_NO
) T1,
(
SELECT :DEPT_NO AS DEPTNO, '검색된 결과가 없습니다.' AS ENAME
FROM DUAL
) T2
WHERE T1.DEPTNO (+) = T2.DEPTNO

억지스러운 쿼리 여기 하나 추가요^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입