비번 체크 SELECT 질문입니다 1 3 1,499

by raksasa [SQL Query] [2013.12.30 21:18:07]


비번 변경을 위한 과거 비번 체크를 하려고 합니다.

SELECT COUNT(*) AS CNT
   FROM 비번테이블
WHERE USER_ID='로그인 사용자 id'
     AND ( PW = '새로입력한 비번'
          OR 과거PW1 = '새로입력한 비번'
          OR 과거PW2 = '새로입력한 비번'
            OR 과거PW3 = '새로입력한 비번'
          OR 과거PW4 = '새로입력한 비번'
         )
새로입력한 비번이 현재 비번, 과거 1~4회의 비번과 동일 한지 비교해서 동일한 값이 있다면 CNT를 해주는 건데 
과거 PW 중 동일한 값이 있더라도 CNT 가 0 으로 출력되더군요 조건의 문제인듯한데..

"새로입력한 비번이 현재 비번, 과거 1~4회의 비번과 동일 한지 비교해서 동일한 값이 있다면 CNT" 이 조건을 어떻게 표현해야할지....

방법 부탁드립니다,
by 마농 [2013.12.30 23:45:16]
조금은 투박하지만.
아무런 문제가 없어 보입니다.
0 이 나온다면 실제로 같은 값이 아닐 것입니다.
투박한걸 다듬는다면...
AND '새로입력한 비번' IN (pw, pw1, pw2, pw3, pw4)

by Oracler [2013.12.31 00:32:36]
비번테이블의 구조가 아마 아래와 같은 듯 합니다.

USER_ID, PW, 과거PW1, 과거PW2, 과거PW3, 과거PW4

유저당 비번테이블에 하나의 로우를 차지하는 거겠죠? (아니면 아래 설명은 무시하시면 됩니다. 다음에 테이블의 구조와 샘플데이터도 같이 올려주시면 좋겠네요)

그렇다면 위 쿼리에서 새로 입력한 비번이 과거의 비번과 여러번 일치하더라도 카운트 값이 최대 1밖에 나오질 않습니다.

비번테이블의 구조가 제가 가정한 바와 같다면 다음과 같이 쿼리를 작성하면 될 것입니다.
SELECT user_id
   , DECODE(PW, '새로입력한 비번', 1, 0)
    + DECODE(과거PW1, '새로입력한 비번', 1, 0)
    + DECODE(과거PW2, '새로입력한 비번', 1, 0)
    + DECODE(과거PW3, '새로입력한 비번', 1, 0)
    + DECODE(과거PW4, '새로입력한 비번', 1, 0) AS cnt
FROM 비번테이블;
GROUP BY 절을 사용해서 해결하려면 테이블 구조를 바꾸셔야 할 것입니다. 그럼, 도움이 되셨길...

by raksasa [2013.12.31 11:05:58]
감사합니다 이방식대로 해보고 원인을 찾았습니다 타입이 varchar2에서 char 로 바뀌면서 공백이 문제였더군요 ㅎㅎㅎ
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입