시퀀스 번호로 열 업데이트 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;
설정해 볼 수 있습니다.Number
AUTO_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
'programing' 카테고리의 다른 글
SQL 합계는 일정 기간 동안 다른 열로 그룹화되어 있습니다. (0) | 2022.12.27 |
---|---|
Python 다중 처리 Pickling Error:절일 수 없다 (0) | 2022.12.27 |
라라벨:DB에서 마지막 N개 항목을 가져오는 방법 (0) | 2022.12.27 |
휴지 상태 타임스탬프 - 밀리초 정밀도 (0) | 2022.12.27 |
메서드를 array_map 함수로 사용할 수 있습니까? (0) | 2022.12.27 |