복붙노트

[SQL] 독특한 증분 값을 테이블에 업데이트 INT 열

SQL

독특한 증분 값을 테이블에 업데이트 INT 열

나는 행마다 고유 한 값과의 InterfaceID (INT) 열에서 값이 누락 행을 채우기 위해 노력하고 있어요.

나는이 쿼리를 할 노력하고있어 :

UPDATE prices SET interfaceID = (SELECT ISNULL(MAX(interfaceID),0) + 1 FROM prices) 
       WHERE interfaceID IS null

나는이 (가) (SELECT ISNULL (MAX (interfaceID), 0) + 1 가격 FROM) 바라고하는 것은 모든 행에 대해 평가,하지만 만 할 것이다 번 등 내 모든 영향을받는 행이 아닌 다른 값과 동일한 값을 얻고있다.

이는 단일 쿼리에서 수행 할 수 있습니까?

해결법

  1. ==============================

    1.

    declare @i int  = SELECT ISNULL(MAX(interfaceID),0) + 1 FROM prices
    
    
    update prices
    set interfaceID  = @i , @i = @i + 1
    where interfaceID is null
    

    작업을 수행해야합니다

  2. ==============================

    2.

    DECLARE @IncrementValue int
    SET @IncrementValue = 0 
    UPDATE Samples SET qty = @IncrementValue,@IncrementValue=@IncrementValue+1
    
  3. ==============================

    3.간단한 쿼리, 그냥 당신이 원하는 어떤 수에 변수를 설정할 수있다. 다음은 그 수에서 1을 증가시켜 필요한 열을 업데이트합니다. 모든 행을 위해 1을 증가시켜 각 행의 ID를 업데이트 할 수 있습니다

    간단한 쿼리, 그냥 당신이 원하는 어떤 수에 변수를 설정할 수있다. 다음은 그 수에서 1을 증가시켜 필요한 열을 업데이트합니다. 모든 행을 위해 1을 증가시켜 각 행의 ID를 업데이트 할 수 있습니다

    SET @a  = 50000835 ;  
    UPDATE `civicrm_contact` SET external_identifier = @a:=@a+1 
    WHERE external_identifier IS NULL;
    
  4. ==============================

    4.포스트 그레스의 경우

    포스트 그레스의 경우

    ALTER TABLE table_name ADD field_name serial PRIMARY KEY
    

    참조 : https://www.tutorialspoint.com/postgresql/postgresql_using_autoincrement.htm

  5. ==============================

    5.오라클 기반 제품에서는 다음과 같은 문장을 사용할 수 있습니다 :

    오라클 기반 제품에서는 다음과 같은 문장을 사용할 수 있습니다 :

    update table set interfaceID=RowNum where condition;
    
  6. ==============================

    6.이 같은 시도 :

    이 같은 시도 :

    with toupdate as (
        select p.*,
               (coalesce(max(interfaceid) over (), 0) +
                row_number() over (order by (select NULL))
               ) as newInterfaceId
        from prices
       )
    update p
        set interfaceId = newInterfaceId
        where interfaceId is NULL
    

    이것은 확실히 그들이 연속하지 않지만, 할당 새로운 높은 ID를한다. 그들에게 연속하려면이 시도 :

    with toupdate as (
        select p.*,
               (coalesce(max(interfaceid) over (), 0) +
                row_number() over (partition by interfaceId order by (select NULL))
               ) as newInterfaceId
        from prices
       )
    update p
        set interfaceId = newInterfaceId
        where interfaceId is NULL
    
  7. ==============================

    7.이 테이블에 대한 기본 키를 가지고 당신이 (당신이해야)한다고 가정뿐만 아니라 CTE 또는 WITH를 사용하여, 같은 테이블에 자체 조인으로 업데이 트를 사용하는 것도 가능합니다 :

    이 테이블에 대한 기본 키를 가지고 당신이 (당신이해야)한다고 가정뿐만 아니라 CTE 또는 WITH를 사용하여, 같은 테이블에 자체 조인으로 업데이 트를 사용하는 것도 가능합니다 :

    UPDATE a
    SET a.interfaceId = b.sequence
    FROM prices a
    INNER JOIN
    (
       SELECT ROW_NUMBER() OVER ( ORDER BY b.priceId ) + ( SELECT MAX( interfaceId ) + 1 FROM prices ) AS sequence, b.priceId
       FROM prices b
       WHERE b.interfaceId IS NULL
    ) b ON b.priceId = a.priceId
    

    나는 기본 키 가격-ID라고 가정했다.

    파생 테이블, 별명 (B)는, 기본 키 컬럼 (들)과 함께 ROW_NUMBER () 함수를 통해 생성 된 시퀀스에 사용된다. 열 인터페이스 ID가 NULL이 각 행에 대해,이 차 키 값과 함께 고유 시퀀스 값 행을 생성한다.

    또한 다른 순서보다는 기본 키 시퀀스를 주문할 수있다.

    시퀀스는 서브 질의를 통해 현재 인터페이스 MAX-ID + 1만큼 오프셋된다. 최대 () 함수는 NULL 값을 무시합니다.

    절은 NULL입니다 해당 행에 업데이트를 제한하는 곳.

    파생 테이블이어서 생성 된 서열 세트를 업데이트 할 수있는 컬럼이있는 기본 키 컬럼 (들)에 결합하는 별명 동일한 테이블에 결합된다.

  8. ==============================

    8.당신은 시도 할 수 있습니다 :

    당신은 시도 할 수 있습니다 :

    DECLARE @counter int
    SET @counter = 0
    UPDATE [table]
    SET [column] = @counter, @counter = @counter + 1```
    
  9. from https://stackoverflow.com/questions/13629382/update-int-column-in-table-with-unique-incrementing-values by cc-by-sa and MIT license