기본키가 없는 테이블 데이터를 update 하고 싶습니다.. 0 2 1,840

by 치킨마요네즈 [SQL Query] postgre update 기본키 [2021.09.03 18:07:37]


안녕하세요.

안풀리는 쿼리가 있어서 여쭤보고 싶습니다 ㅠㅠ

 

기본키가 설정되지 않는 테이블에 특정 데이터를 한건만 업데이트 하는 것인대요,

가령 아래와 같이 있다고 했을때,

------------------------------------
field1   | field2 | field3   | field4
------------------------------------
홍길동  |   14   |  서울   | 승용차
------------------------------------
홍길동  |   15   |  서울   | 자동차
------------------------------------
홍길동  |   14   |  서울   | 자동차
------------------------------------

2번째 low 값 중, field3 을 "부산" 으로 바꾸고 싶습니다.

재가 생각한방법은

UPDATE /*+ bypass_ujvc */    

        select * from (
                SELECT 
                    (ROW_NUMBER() OVER()) AS ROWNUM
                    , * 
                FROM [table]
        ) a
        where a.ROWNUM = 2

set
    field3  = '부산'

이지만,  ERROR: syntax error at or near "(" LINE 2: ( ^ SQL state: 42601 Character: 28 오류가

나고 있습니다. 

문법이 틀린건지, 지원을 안하는건지, 감이 안오내요 ㅠㅠ

참고로 DB 는 postgresql 입니다.

 

쿼리가 틀렸다면 어떤식으로 접근해야할까요??

 

 

 

 

 

by pajama [2021.09.04 09:47:55]

postgresql는 오라클의 rowid와 비슷한 ctid란게 있네요.

이걸로 update하면 되지 않을까요?

update table a
set field3='부산'
from (select *, ctid, row_number() over(order by ctid) rn from table) b
where a.ctid = b.ctid and b.rn=2
returning *

 


by 마농 [2021.09.06 09:28:45]
-- 꼭 PK 가 아니더라도 해당 행을 특정할 수 있는 조건을 주시면 됩니다.

SELECT *
  FROM t
 WHERE field1 = '홍길동'
   AND field2 = '15'
   AND field3 = '서울'
   AND field4 = '자동차'
;

UPDATE t
   SET field3 = '부산'
 WHERE field1 = '홍길동'
   AND field2 = '15'
   AND field3 = '서울'
   AND field4 = '자동차'
;

 

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