Обновить строку с данными из другой строки в одной таблице - программирование
Подтвердить что ты не робот

Обновить строку с данными из другой строки в одной таблице

У меня есть таблица, которая выглядит примерно так.

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

Я ищу способ обновить значения "Test2" и "Test" с данными из других строк столбца "VALUE" с тем же "NAME" (идентификатор здесь не уникален, составной ключ идентификатора и NAME делают строку уникальной). Например, вывод, который я ищу, это:

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

Если бы это было в другой таблице, все было бы хорошо, но я не понимаю, как я могу ссылаться на другую строку в текущей таблице с тем же значением NAME.

Update

После изменения запроса manji ниже приведен запрос, который я использовал для рабочего решения. Спасибо всем!

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

Ответ 1

Попробуйте следующее:

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

Ответ 2

Вот мой ход:

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;

EDIT: Удалено избыточное условие t1.id != t2.id.

Ответ 3

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
                )

Ответ 4

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

Ответ 5

Если вам просто нужно вставить новую строку с данными из другой строки,

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