programing

동일한 테이블에있는 다른 행의 데이터로 행 업데이트

sourcetip 2021. 1. 14. 23:45
반응형

동일한 테이블에있는 다른 행의 데이터로 행 업데이트


이렇게 생긴 테이블이 있어요

ID   |   NAME    |  VALUE  |
----------------------------
 1   |   Test    |  VALUE1 |
 2   |   Test2   |  VALUE2 |
 1   |   Test2   |         |
 4   |   Test    |         |
 1   |   Test3   |  VALUE3 |

동일한 'NAME'을 가진 'VALUE'열에있는 다른 행의 데이터로 'Test2'및 'Test'값을 업데이트하는 방법을 찾고 있습니다 (ID는 여기서 고유하지 않습니다. ID의 복합 키). 및 NAME은 행을 고유하게 만듭니다). 예를 들어 내가 찾고있는 출력은 다음과 같습니다.

ID   |   NAME    |  VALUE  |
----------------------------
 1   |   Test    |  VALUE1 |
 2   |   Test2   |  VALUE2 |
 1   |   Test2   |  VALUE2 |
 4   |   Test    |  VALUE1 |
 1   |   Test3   |  VALUE3 |

다른 테이블에 있으면 괜찮지 만 동일한 NAME 값을 사용하여 현재 테이블 내에서 다른 행을 참조 할 수있는 방법을 잃어 버렸습니다.

최신 정보

manji 쿼리를 수정 한 후 다음은 작업 솔루션에 사용한 쿼리입니다. 모두 감사합니다!

UPDATE data_table dt1, data_table dt2 
SET dt1.VALUE = dt2.VALUE 
WHERE dt1.NAME = dt2.NAME AND dt1.VALUE = '' AND dt2.VALUE != '' 

이 시도:

UPDATE data_table t, (SELECT DISTINCT ID, NAME, VALUE
                        FROM data_table
                       WHERE VALUE IS NOT NULL AND VALUE != '') t1
   SET t.VALUE = t1.VALUE
 WHERE t.ID = t1.ID
   AND t.NAME = t1.NAME

여기에 내 간다 :

UPDATE test as t1 
    INNER JOIN test as t2 ON 
        t1.NAME = t2.NAME AND 
        t2.value IS NOT NULL 
SET t1.VALUE = t2.VALUE;

편집 : 불필요한 t1.id != t2.id조건을 제거했습니다 .


Update MyTable
Set Value = (
                Select Min( T2.Value )
                From MyTable As T2
                Where T2.Id <> MyTable.Id
                    And T2.Name = MyTable.Name
                )
Where ( Value Is Null Or Value = '' )
    And Exists  (
                Select 1
                From MyTable As T3
                Where T3.Id <> MyTable.Id
                    And T3.Name = MyTable.Name
                )

UPDATE financialyear
   SET firstsemfrom = dt2.firstsemfrom,
       firstsemto = dt2.firstsemto,
       secondsemfrom = dt2.secondsemfrom,
       secondsemto = dt2.secondsemto
  from financialyear dt2
 WHERE financialyear.financialyearkey = 141
   AND dt2.financialyearkey = 140

다른 행의 데이터가있는 새 행을 삽입해야하는 경우

    insert into ORDER_ITEM select * from ORDER_ITEM where ITEM_NUMBER =123;

ReferenceURL : https://stackoverflow.com/questions/5574434/update-row-with-data-from-another-row-in-the-same-table

반응형