쿼리에서.. 이런 에러가 나는데요~ 0 4 1,657

by 장현수 [2007.12.31 10:33:13]


ORA-01427: single-row subquery returns more than one row

 

이런.. 에러가 나는데요`~

 

이걸 해결하려면.. 어떻게 해야 할까요?

 

쿼리는.. 이전에 사용하고 있는 테이블 XFORG_PERSON과 XFORG_PERSON_INFO를

 

조인하여 TB_T301M의 ID와 PASSWD를 넣으려고 합니다.

 

XFORG_PERSON의 NFUID와 XFORG_PERSON_INFO의 NFUID를 연결해서

 

사용하고.. XFORG_PERSON의 EXPIRE_TIME이 가장 최근것의 아이디와 패스워드를

 

업데이트 하는겁니다.

 

쿼리문은 아래와 같습니다.

 

-- 아이디 업데이트

UPDATE TB_T301M
   SET SF_ID = ( SELECT SUBSTR(A.NFUID, 1, 14)
                   FROM XFORG_PERSON A, XFORG_PERSON_INFO B, TB_T301M C
                  WHERE A.NFUID = B.NFUID
                    AND A.EXPIRE_TIME IN ( SELECT MAX(EXPIRE_TIME) FROM XFORG_PERSON )
                    AND REPLACE(C.MEMBER_ID, '-', '') = B.LICENSE)
 WHERE REPLACE(MEMBER_ID, '-', '') IN ( SELECT B.LICENSE
                                          FROM XFORG_PERSON A, XFORG_PERSON_INFO B, TB_T301M C
                                         WHERE A.NFUID = B.NFUID
                                           AND A.EXPIRE_TIME IN ( SELECT MAX(EXPIRE_TIME) FROM XFORG_PERSON )
                                           AND REPLACE(C.MEMBER_ID, '-', '') = B.LICENSE )

 

 

-- 패스워드 업데이트

UPDATE TB_T301M
   SET PASSWD = ( SELECT A.USER_PASSWD
                    FROM XFORG_PERSON A, XFORG_PERSON_INFO B, TB_T301M C
                   WHERE A.NFUID = B.NFUID
                     AND A.EXPIRE_TIME IN ( SELECT MAX(EXPIRE_TIME) FROM XFORG_PERSON )
                     AND REPLACE(C.MEMBER_ID, '-', '') = B.LICENSE)
 WHERE REPLACE(MEMBER_ID, '-', '') IN ( SELECT B.LICENSE
                                          FROM XFORG_PERSON A, XFORG_PERSON_INFO B, TB_T301M C
                                         WHERE A.NFUID = B.NFUID
                                           AND A.EXPIRE_TIME IN ( SELECT MAX(EXPIRE_TIME) FROM XFORG_PERSON )
                                           AND REPLACE(C.MEMBER_ID, '-', '') = B.LICENSE )

 

 

by 채용근 [2007.12.31 00:00:00]
SET 부분에 서브쿼리에서 값이 2개 이상 나왔을시 나는 메시지 입니다.

by 장현수 [2007.12.31 00:00:00]
에러가 무슨뜻인지는 아는데~~ 해결방법을 모르겠습니다.. ㅡㅡ;

by 채용근 [2007.12.31 00:00:00]
update 가 조금 이상한데요

TB_T301M C를 서브쿼리에 넣어야 할게 맞나요?

UPDATE TB_T301M C
... SET PASSWD ..
( SELECT REPLACE(C.MEMBER_ID ..) = B.LICENSE ) 이거 아닌가요? 혹시

by 마농 [2007.12.31 00:00:00]
UPDATE tb_t301m c
SET (sf_id, passwd) =
(
SELECT SUBSTR(a.nfuid,1,14), a.user_passwd
FROM xforg_person a, xforg_person_info b
WHERE a.nfuid = b.nfuid
AND a.expire_time = (SELECT MAX(expire_time) FROM xforg_person)
AND b.license = REPLACE(c.member_id,'-','')
)
WHERE EXISTS
(
SELECT ''
FROM xforg_person a, xforg_person_info b
WHERE a.nfuid = b.nfuid
AND a.expire_time = (SELECT MAX(expire_time) FROM xforg_person)
AND b.license = REPLACE(c.member_id,'-','')
)
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입