2014-05-22 3 views
1

다른 열의 동일한 값을 가진 행에서 같은 열의 값으로 열 (NULL 인 경우)을 업데이트하려고합니다 (그러한 경우 행이 있고 고유합니다). 아래 예제에서 Order_ID = 2에는 NULL Group_ID가 있습니다. 쿼리는 수량 열에 동일한 값을 가진 (고유 한) 행의 Group_ID를 삽입해야합니다. (이것은 단순한 예이며, 실제 테이블에는 30 개의 열과 900,000 개의 행이 있습니다.) 나는이 쿼리를 시도Oracl SQL : 다른 열의 조건과 함께 다른 열의 동일한 열 값으로 열 업데이트

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

,하지만 분명히 걸리면 내가 (시간 후)을 중지해야합니다 :

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

그래서 예상 출력은

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) 

답변

0

이 의지 group_id를 선택된 동일한 양의 첫 x 째 레코드에서 group_id 값으로 설정하십시오.

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 
+0

검색어를 실행했습니다. 다시 그것은 너무 많은 시간이 걸립니다. 테이블의 크기를 감안할 때 몇 시간이 걸릴까요? – Matin

+0

수량 열에 인덱스가 필요할 수도 있습니다. 쿼리가 실행되는 방법에 대한 자세한 정보를 제공하는 Explain 계획을 작성하는 방법은 다음을 참조하십시오. http://dba.stackexchange.com/questions/18639/how-do-you-get-the-explain-plan – Rene

+0

이제 나는 plan_table을 가지고있다. UPDATE STATEMENT의 경우 CPU_cost는 221447373180674, IO_cost : 2894221652, 시간 : 34859082입니다.이 숫자를 이해하고 있는지 확신 할 수 없지만 너무 큽니다. 쿼리를 효율적으로 만들려면 어떻게해야합니까? – Matin

관련 문제