insert 후 Numbering 0 3 1,040

by bryan [SQL Query] Numbering SQL [2018.08.23 18:54:18]


No | Data
 1  | AAA
 2  | BBB

이거를...

No | Data
 1  | AAA
 2  |
 3  | BBB

이렇게 만들고자 합니다.

INSERT INTO T (No) VALUES ('2');
UPDATE T SET No=3 WHERE No=2 AND Data=BBB;

하면 될텐데요.

 

원하는건 레코드가 많을때, Insert 이후에 Update 한번으로 모든 레코드의 No 를 1씩 증가시키고 싶습니다.

No | Data
 1  | AAA
 2  |
 3  | BBB
 4  | CCC
 5  | DDD

요렇게 하고 싶은데요. Update 한번으로 가능할런지요?

미리 감사합니다!

 

by 아발란체 [2018.08.23 20:13:30]
UPDATE TT SET
    no = (no - 3 - 1) * 2 + 5
WHERE
    no > 3
;

MERGE INTO TT USING (
    SELECT 
        LEVEL AS no
    FROM
        DUAL 
    CONNECT BY 
        LEVEL <= (SELECT MAX(no) FROM TT)
) DT ON (
    TT.no = DT.no
)
WHEN NOT MATCHED THEN
    INSERT
        (no, data)
    VALUES
        (DT.no, NULL)
;

SELECT * FROM TT ORDER BY no;

 


by bryan [2018.08.24 11:20:01]

답변 너무너무너무 감사합니다!

완전 초보라 코드 대부분이 한눈에 들어오지가 않네요.

다만


UPDATE TT SET no = no + 1 WHERE no > 3;

이 한줄만으로도 사이다 입니다.

다시 한번 감사합니다.


by 마농 [2018.08.27 07:29:28]

no 가 PK 라면 PK 를 일괄 변경하는 것은 바람직하지 않습니다.
정렬을 따로 원한다면?
PK 는 그대로 두고 정렬용 항목을 별도로 가져가는 것이 좋을 것 같습니다.

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