Oracle SQL: actualice una columna con el valor de la misma columna en otras filas con condición en otras columnas

Quiero actualizar una columna (si es NULL) con el valor de la misma columna de una fila que tiene el mismo valor en otra columna (suponiendo que dicha fila exista y sea única). En el siguiente ejemplo, Order_ID=2 tiene NULL Group_ID. La consulta debe insertar Group_ID de una fila (única) que tiene el mismo valor en la columna Cantidad. (Este es un ejemplo simplificado. La tabla real tiene 30 columnas y 900'000 filas).

Order_ID  Price  Quantity  Group_ID
1         10     15        345
2         21     15        NULL

Entonces la salida esperada es:

Order_ID  Price  Quantity  Group_ID
1         10     15        345
2         21     15        345

Intenté esta consulta, pero obviamente se atasca y tengo que detenerla (después de horas):

update My_Table t1
set Group_ID=(select t2.Group_ID 
from My_Table t1 inner join My_Table t2
on
t1.Quantity = t2.Quantity
where t1.Group_ID is not NULL and t2.Group_ID is NULL)

preguntado el 22 de mayo de 14 a las 13:05

1 Respuestas

Esto establecerá group_id en un valor de group_id del primer registro con la misma cantidad que se selecciona.

update table t1
set group_id = (select group_id from table t2
                where t1.quantity=t2.quantity
                and t2.group_id is not null
                and rownum=1)
where group_id is null

contestado el 22 de mayo de 14 a las 13:05

Ejecuté tu consulta. Una vez más, está tomando demasiado tiempo. Dado el tamaño de la mesa, ¿debería llevar horas? - Mañana

Tal vez necesite un índice en la columna de cantidad. Vea aquí cómo crear un plan de explicación que le dará más información sobre dónde se ejecuta la consulta: dba.stackexchange.com/questions/18639/… - rene

Ahora tengo el plan_table. Para DECLARACIÓN DE ACTUALIZACIÓN, CPU_cost es 221447373180674, IO_cost: 2894221652, time: 34859082. Debo confesar que no estoy seguro de entender estos números, pero tengo la sensación de que son demasiado grandes. ¿Cómo puedo hacer que la consulta sea eficiente? - Mañana

Números realmente grandes. ¿Puede agregar un índice de cantidad? Vea lo que eso le hace a los números. - rene

Perdón por ser tan principiante, pero ¿cómo puedo "agregar un índice" a una columna? - Mañana

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.