programing

업데이트에서 레코드에 순차적으로 번호 매기기

cafebook 2023. 7. 2. 20:58
반응형

업데이트에서 레코드에 순차적으로 번호 매기기

정상적으로 작동하는 다음 SQL 쿼리가 있습니다.

UPDATE tnTOPIC A1
INNER JOIN (SELECT
                fnTOPIC_IDX fnIDX,
                COUNT(1) fnCOUNT
                FROM tnURL
                WHERE fnGOTIMAGE = 0
                GROUP BY fnTOPIC_IDX) A2
                ON (A1.fnIDX = A2.fnIDX
              )
SET A1.fnRECORDS_REMAINING = A2.fnCOUNT

출력 시퀀스로 tnTOPic(fnROW_NUMBER)의 추가 필드를 업데이트하고 싶습니다.

1번 기록은 1번, 2번 기록은 2번 기록입니다.

저는 MariaDB를 사용합니다.

잘 부탁드립니다.

사용할 수 있습니다.ROW_NUMBER()테이블에 가입하는 하위 쿼리의 창 기능:

UPDATE tnTOPIC t
INNER JOIN (
  SELECT t.fnIDX, u.fnCOUNT,
         ROW_NUMBER() OVER (ORDER BY t.fnIDX) rn
  FROM tnTOPIC t
  INNER JOIN (
    SELECT fnTOPIC_IDX fnIDX, COUNT(1) fnCOUNT
    FROM tnURL
    WHERE fnGOTIMAGE = 0
    GROUP BY fnTOPIC_IDX
  ) u ON u.fnIDX = t.fnIDX 
) s ON s.fnIDX = t.fnIDX
SET t.fnRECORDS_REMAINING = s.fnCOUNT,
    t.fnROW_NUMBER = s.rn

만약 당신이 그것을 모두 확신한다면.fnTOPIC_IDX당신의 하위 쿼리가 일치fnIDXtnTOPIC코드를 다음과 같이 단순화할 수 있습니다.

UPDATE tnTOPIC t
INNER JOIN (
  SELECT fnTOPIC_IDX fnIDX, COUNT(1) fnCOUNT,
         ROW_NUMBER() OVER (ORDER BY fnTOPIC_IDX) rn
  FROM tnURL
  WHERE fnGOTIMAGE = 0
  GROUP BY fnTOPIC_IDX
) u ON u.fnIDX = t.fnIDX
SET t.fnRECORDS_REMAINING = u.fnCOUNT,
    t.fnROW_NUMBER = u.rn

사용합니다fnIDX에서ORDER BY의 조항.ROW_NUMBER().
만약 당신이 시퀀스에 대해 다른 주문을 원한다면 그것을 변경할 수 있습니다.

언급URL : https://stackoverflow.com/questions/66829828/seqentially-numbering-records-in-an-update

반응형