> 데이터 베이스 > MySQL 튜토리얼 > 조인이 포함된 Oracle UPDATE 쿼리로 인해 무한 루프가 발생하는 이유는 무엇입니까?

조인이 포함된 Oracle UPDATE 쿼리로 인해 무한 루프가 발생하는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-24 00:04:15
원래의
340명이 탐색했습니다.

Why Does My Oracle UPDATE Query with a Join Cause an Infinite Loop?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿