복붙노트

[SQL] 와 업데이트는 오라클에서 쿼리 가입

SQL

와 업데이트는 오라클에서 쿼리 가입

쿼리의 잘못은 무엇인가? (무기한 실행)

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);

저를 도와주세요.

해결법

  1. ==============================

    1.귀하의 쿼리는 일반 표 1, 표 2 및 join_key 참조로 많은 이해하지 않습니다.

    귀하의 쿼리는 일반 표 1, 표 2 및 join_key 참조로 많은 이해하지 않습니다.

    이없는 당신이 찾고있는 경우, 당신이 찾고있는 결과의 더 나은 아이디어를 얻을 일부 샘플 데이터가 도움이 될 것이다.

    update table1 t1
       set t1.col = (select t2.col
                     from table2 t2
                     where  t1.join_key = t2.join_key(+)  
                      and  t1.col is not null),
           t1.output = (select t2.output + t1.col
                        from  table2 t2
                       where  t1.join_key = t2.join_key(+)  
                         and  t1.col is not null);
    
  2. ==============================

    2.당신의 SELECT 하위 쿼리가 하나의 행을 반환하지 않는 한, 당신의 UPDATE 문은 오류와 함께 실패한다

    당신의 SELECT 하위 쿼리가 하나의 행을 반환하지 않는 한, 당신의 UPDATE 문은 오류와 함께 실패한다

    ORA-01427: single-row subquery returns more than one row
    

    당신이 상관 업데이트가 유장 일반적으로, 당신은 하위 쿼리가 하나의 행을 반환하는 것을 보장하기 위해 내부 하위 쿼리의 행을 외부 테이블 T1의 행에 관한 몇 가지 조건이 필요합니다. 즉 일반적으로 같을 것

    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);
    

    마지막으로,이 UPDATE 문은 T1의 모든 행을 업데이트하고 있습니다. 그게 당신이 의도 무엇인가? 또는 당신은, 예를 들어, 당신이 당신의 하위 쿼리에 일치하는 항목을 찾아 행을 업데이트 하시겠습니까?

  3. from https://stackoverflow.com/questions/6733887/update-with-join-query-in-oracle by cc-by-sa and MIT license