Oracle SQL: actualice una columna con el valor de la misma columna en otras filas con condición en otras columnas
Frecuentes
Visto 3,561 equipos
1
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)
1 Respuestas
0
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
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas oracle sql-update inner-join or haz tu propia pregunta.
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