programing

시퀀스 번호로 열 업데이트 mysql

firstcheck 2022. 12. 27. 21:53
반응형

시퀀스 번호로 열 업데이트 mysql

다음과 같은 열이 있는 테이블이 있습니다(이것은 50K 레코드가 있는 예에 불과합니다).

Name,   Number

Joe     Null
Michael Null
Moses   Null

1 ~ 3 의 시퀀스 번호로 번호를 갱신하면, 다음과 같이 됩니다.

Name,   Number

Joe     1
Michael 2
Moses   3

SQL for Mysql에서 하나의 SQL 명령어로 실행하는 방법

SET @rank:=0;
update T
set Number=@rank:=@rank+1;

갱신하다

하나의 진술로 대체되는 방법

UPDATE T
JOIN (SELECT @rank := 0) r
SET Number=@rank:=@rank+1;

설정해 볼 수 있습니다.NumberAUTO_INCREMENT로 전송하여 번호가 생성됩니다.

ALTER TABLE your_table MODIFY Number INT AUTO_INCREMENT

그 이외에는 a)저장된 루틴 b)어플리케이션 코드가 필요할 수 있습니다.

저는 온라인에서 답을 찾느라 애를 먹었고, 위의 몇 가지 정보를 바탕으로 다른 업데이트 접근 방식을 사용하는 다음과 같은 방법이 제게 효과가 있다는 것을 알게 되었습니다.다른 사람에게도 도움이 될까봐 여기에 글을 올린다.

주의: 데이터 세트의 경우 순위는 일회성 고정 계산이므로 변경되지 않습니다.데이터를 MySQL에서 Python으로 가져올 때마다 실행되는 연산을 저장하기 위해 컬럼으로 추가하고 싶었습니다.

사용한 솔루션:

  • 순위를 0으로 설정하다(위와 같다)
  • 순위를 계산할 선택 쿼리를 포함하는 임시 테이블을 만듭니다.
  • 계산된 순위를 사용하여 원래 테이블을 업데이트합니다.

사용된 샘플 이름, rowid는 각 행의 고유 식별자, value는 각 행의 순위를 결정하는 데 사용되는 메트릭입니다.

SET @rank=0;
CREATE TEMPORARY TABLE rank_temp
AS
(SELECT rowid, value, @rank:=@rank+1 AS rank FROM source_table ORDER BY value ASC);

UPDATE sourcetable a, rank_temp b
SET a.rank = b.rank
WHERE a.rowid = b.rowid;

이것은 조잡한 방법이지만, 제 데이터 세트에 효과가 있었습니다.

update `table_name` set `Number`=@rank:=@rank+1

이건 할 수 있을 거야.감사해요.

위의 두 가지 솔루션을 사용하여 이 쿼리를 작성했더니 효과가 있었습니다.

SET @rank=0;update emp_data set empfk_id = @rank:=@rank+1;

언급URL : https://stackoverflow.com/questions/6617056/updating-columns-with-a-sequence-number-mysql

반응형