Oracle에서 조인 쿼리를 사용한 업데이트: 무한 루프 문제 해결
제공된 Oracle UPDATE 쿼리는 무기한 실행되어 무엇이 발생할 수 있는지에 대한 질문을 제기합니다. 이 문제의 원인. 쿼리는 다른 두 테이블을 조인하는 상관 하위 쿼리를 사용하여 table1의 열을 업데이트하려고 시도합니다.
무한 루프의 근본 원인은 하위 쿼리에 단일 테이블을 반환하도록 하는 조건이 없기 때문일 가능성이 높습니다. table1의 각 행에 대한 행입니다. 이러한 조건이 없으면 하위 쿼리가 여러 행을 반환할 수 있으며, 이로 인해 단일 행 업데이트 작업에 대한 UPDATE 문의 요구 사항을 위반하게 됩니다.
이 문제를 해결하려면 다음에 조건을 추가해야 합니다. table1의 행을 하위 쿼리의 행과 연결하는 하위 쿼리입니다. 여기에는 일반적으로 AND 절을 사용하여 테이블 간의 기본 키 또는 고유 키를 일치시키는 작업이 포함됩니다. 예:
UPDATE table1 t1 SET (t1.col,t1.Output) = ( SELECT t2.col, t3.Output + t2.col FROM tabl2 t3 LEFT JOIN table1 t2 ON t3.Join_Key = t2.Join_Key WHERE t2.col is not NULL AND t1.some_key = t2.some_key);
이 예에서 AND t1.some_key = t2.some_key 조건은 하위 쿼리가 table1의 각 행에 대해 최대 한 행을 반환하도록 보장하여 무한 루프를 방지합니다.
또 다른 중요한 고려 사항은 UPDATE 문이 table1의 모든 행을 업데이트할지, 아니면 그 중 일부만 업데이트할지 여부입니다. 원래 쿼리에는 WHERE 절이 포함되어 있지 않습니다. 이는 원하는 동작이 아닐 수 있는 모든 행을 업데이트함을 나타냅니다. 특정 행 하위 집합만 업데이트해야 하는 경우 WHERE 절을 추가하여 업데이트 기준을 충족하는 행을 필터링해야 합니다.
위 내용은 조인이 포함된 Oracle UPDATE 쿼리로 인해 무한 루프가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!