간단한 쿼리 질문입니다. 0 9 1,450

by 유경호 [Oracle 기초] [2013.03.05 12:16:29]



안녕하세요~

초보 쿼리입니다.

SELECT DECODE(NVL(COLUMN1,'0'),'0','N','Y') FROM TALBE1 WHERE COLUMN1 = 'NAME1'

위에 쿼리를 보시면은 NAME1은 TABLE1에 존재하는 데이터입니다.

그래서 리턴 값은 Y이구요, TABLE1에 없는 데이터 NAME2를 조회 햇을때 왜 N가 안 나오는거에요 ?

고수 님들 도와주세요~
by 아발란체 [2013.03.05 12:29:51]

말이.... 좀 어페가 있어 보이는데용,
그 말은 "TABLE1에 없는 데이타 NAME2를 조회 했을때... " 부분은데
쓰신 말 그대로 NAME2 데이타는 TABLE1에 없는 데이타 입니다.
없는 데이타는 레코드 자체가 출력이 안됩니다.
그렇게 때문에 조건절이 어떻게 되든 출력이 안되고 DECODE문도 타지 않습니다.


by 유경호 [2013.03.05 12:36:19]
 ~네 그럼 원하는 결과 N을 출력 할려면은 어떻게 해야 되나요 ?

by 아발란체 [2013.03.05 15:21:02]

해당 테이블에 데이타가 존재한다면
올려주신 질의어에서 조건문만 삭제를 했을 때
SELECT DECODE(NVL(COLUMN1,'0'),'0','N','Y') FROM TALBE1

그럼 값이 NAME1이든 NAME2이던 값이 있으면 Y를 출력하고요,
값이 없으면 N를 출력합니다.

확인 사항이
SELECT COUNT(*) FROM TABLE1 WHERE COLUMN1 IS NULL
이와 같이 질의어를 수행하여 데이타 0건 조회 된다면
무조건 Y 밖에 출력될 수 없습니다.
1건 이상이면 여기에 잡힌 데이타들이 N으로 조회 될 수 있습니다.


by 부쉬맨 [2013.03.05 12:46:49]
아발란체님의 말씀을빌리자면

A B C ' '  <== 이렇게된 데이터와(데이터는존재하지만해당 컬럼에만없는데이터)
''  ''   ''   '' <== 이렇게된 데이터는 (없는로우)

일단 로우의 개념으로 보시면될꺼같네요.


COLUMN1 의 로우데이터가 존재하는지..
한줄에 여러개 컬럼이 표현된다면 해당컬럼에 데이터가없어도 나올꺼고
하지만 한줄이 표현이 되지않는다면 해당컬럼에 데이터는 없으면 나오지않을것이고.

어렵나-_-;;


by 유경호 [2013.03.05 12:51:55]

이해 했습니다... ㅋㅋ 답볍 감사합니다.


by 신이만든짝퉁 [2013.03.05 13:14:07]
이렇게 한번 해보세요.

with t as
(
    select 'name1' column1 from dual union all
    select 'name3' column1 from dual
)
select decode(result, 0, 'N', 'Y') YN
  from (
        select count(*) result
          from t
         where column1 = 'name2'
        )
;

by 마농 [2013.03.05 13:17:03]
-- 1. Group 함수 사용
SELECT NVL(MIN('Y'), 'N') yn
  FROM talbe1
 WHERE column1 = :v_column1
;
-- 2. 스칼라서브쿼리
SELECT NVL((SELECT 'Y' FROM talbe1 WHERE column1 = :v_column1), 'N') yn
  FROM dual
;
-- 3. 아우터 조인
SELECT NVL2(column1, 'Y', 'N') yn
  FROM talbe1
 RIGHT OUTER JOIN dual
    ON column1 = :v_column1
;

by 신이만든짝퉁 [2013.03.05 13:28:47]
코드의 길이가 다르네요.
마농님께 또 배우고 갑니다.  ^^

by 아린 [2013.03.06 10:43:49]
WITH t(a, b) AS(
SELECT 'NAME1', 100 FROM dual UNION ALL
SELECT 'NAME3', 100 FROM dual
)
SELECT *
  FROM (SELECT 'Y' FROM t WHERE a = 'NAME1'
         UNION ALL
        SELECT 'N' FROM dual
        )
 WHERE ROWNUM = 1 
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입