쿼리문 질문 입니다. 0 4 1,330

by 손님 [SQL Query] 쿼리 [2012.04.25 14:00:03]


오라클 9i 사용중 입니다.
아래와 같은 SELECT 문은 되는데요,
SELECT * 
FROM     TBL1                                                                           
WHERE    SEQ = '12345'
AND ROWNUM < 11
ORDER BY SCORE DESC
아래와 같은 UPDATE 문은 에러가 나네요.
UPDATE   TBL1
SET      YN = 'Y'
WHERE    SEQ = '12345'
AND ROWNUM < 11
ORDER BY SCORE DESC
쿼리문 보시면, 대충 아시겠지만, 특정 조건을 뽑아오는데, 정렬기준으로 상위 10개를 뽑아오는 겁니다.
부탁 좀 드립니다.
by eunna [2012.04.25 14:09:14]

UPDATE TBL1
SET YN = 'Y'
WHERE SEQ  IN (SELECT SEQ 
FROM TBL1
WHERE SEQ = '12345'
  AND ROWNUM < 11)


이게 맞는거 같네여

by 마농 [2012.04.25 14:39:17]

우선 첫번째 Select 쿼리결과가 정말 정렬기준 10건 가져오는건지 의문이네요.
위 쿼리는 정렬 후 10건 추리는 쿼리가 아니라
10건 추린후 정렬하는 쿼리입니다.
쿼리수행중 정렬이 제일 나중에 수행되지요.

두번째로 Update 구문엔 정렬구문이 허용되질 않습니다.
정렬은 Select 할때만 필요한것이죠.


by 손님 [2012.04.25 16:54:18]
마농님 답변 감사드립니다.
그럼, 정렬후 10건을 추리고 싶은데, 어떻게 하면 될까요?

by 마농 [2012.04.25 17:14:48]
SELECT *
  FROM (SELECT *
          FROM tbl1
         WHERE seq = '12345'
         ORDER BY score DESC
        )
 WHERE ROWNUM <= 10
;
UPDATE tbl1
   SET yn = 'Y'
 WHERE ROWID IN (SELECT rid
                   FROM (SELECT ROWID rid
                           FROM tbl1
                          WHERE seq = '12345'
                          ORDER BY score DESC
                         )
                  WHERE ROWNUM <= 10
                 )
;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입