조건에 맞지 않는 경우도 행으로 함께 출력? 0 5 1,815

by 윤영재 [SQL Query] [2012.06.01 12:43:13]




먼저 제목이 이상한점 양해 부탁드립니다. 머라고 표현해야 할지 몰라서요..^^;;

회원번호, 회원명으로 구성된 A테이블이 있습니다.
 번호  이름
 1  홍길동
 2  일지매
 3  심봉사


이 테이블을 아래와 같이 조회합니다.
select name from a where num in (1,3,4,2)

이 조회의 결과값을 1:홍길동/3:심봉사/4:없음/2:일지매 형태로 가져오고 싶습니다.

고수님들 살려주세요..이런건 안되는건가요?
by 마농 [2012.06.01 14:01:22]
조회조건이 별도 테이블로 구성되어 있다면 아우터 조인으로 가능합니다.
WITH 검색대상테이블 AS
(
SELECT 1 번호, '홍길동' 이름 FROM dual
UNION ALL SELECT 2, '일지매' FROM dual
UNION ALL SELECT 3, '심봉사' FROM dual
)
, 검색조건테이블 AS
(
SELECT 1 번호 FROM dual
UNION ALL SELECT 3 FROM dual
UNION ALL SELECT 4 FROM dual
UNION ALL SELECT 2 FROM dual
)
SELECT a.번호
     , NVL(b.이름, '없음') 이름
  FROM 검색조건테이블 a
     , 검색대상테이블 b
 WHERE a.번호 = b.번호(+)
;

by 윤영재 [2012.06.01 14:42:51]


답변 감사합니다~ 저기 근데 조회조건이 별도 테이블이 아니고 웹에서 넘어온 파라미터 값인데 이경우에는 안되는 건가요?


by 윤영재 [2012.06.01 14:45:37]

그리고 추가로 위 쿼리 결과는 번호순서대로 나오게 되는데 이걸 조건의 순서대로 출력할수는 없을까요?
1,2,3,4 => 1,3,2,4순서로


by 마농 [2012.06.01 14:58:36]
SELECT a.번호
     , NVL(b.이름, '없음') 이름
  FROM 검색대상테이블 b
     , (SELECT LEVEL 순서
             , REGEXP_SUBSTR(v, '[^,]', 1, LEVEL) 번호
          FROM (SELECT '1,3,4,2' v FROM dual)
         CONNECT BY LEVEL <= LENGTH(v) - LENGTH(REPLACE(v, ',')) + 1
        ) a
 WHERE a.번호 = b.번호(+)
 ORDER BY a.순서
;

by 윤영재 [2012.06.01 15:34:16]

아..정말정말 감사합니다~ 좋은 하루 되세요~
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입