optimizar - duplicar registro mysql misma tabla
Actualizar fila con datos de otra fila en la misma tabla (5)
Aquí está mi ir:
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;
EDITAR: eliminó la condición t1.id != t2.id
Tengo una mesa que se ve algo como esto
ID | NAME | VALUE |
----------------------------
1 | Test | VALUE1 |
2 | Test2 | VALUE2 |
1 | Test2 | |
4 | Test | |
1 | Test3 | VALUE3 |
Estoy buscando una manera de actualizar los valores ''Test2'' y ''Prueba'' con los datos de otras filas en la columna ''VALOR'' con el mismo ''NOMBRE'' (El ID no es exclusivo aquí, una clave compuesta de la ID y NAME hacen una fila única). Por ejemplo, el resultado que estoy buscando es:
ID | NAME | VALUE |
----------------------------
1 | Test | VALUE1 |
2 | Test2 | VALUE2 |
1 | Test2 | VALUE2 |
4 | Test | VALUE1 |
1 | Test3 | VALUE3 |
Si estuviera en otra tabla estaría bien, pero no sé cómo puedo hacer referencia a una fila diferente dentro de la tabla actual con el mismo valor de NAME.
Actualizar
Después de modificar la consulta manji, a continuación se muestra la consulta que utilicé para una solución funcional. ¡Gracias a todos!
UPDATE data_table dt1, data_table dt2
SET dt1.VALUE = dt2.VALUE
WHERE dt1.NAME = dt2.NAME AND dt1.VALUE = '''' AND dt2.VALUE != ''''
Prueba esto:
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
Si solo necesita insertar una nueva fila con datos de otra fila,
insert into ORDER_ITEM select * from ORDER_ITEM where ITEM_NUMBER =123;
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
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
)