복붙노트

[SQL] 오라클 업데이트 쿼리에 참여하여

SQL

오라클 업데이트 쿼리에 참여하여

가입하고 난 사용하고 있지만 예외를 받고 양을 업데이트하는 것을 시도하고있다 :

UPDATE tab1
   SET tab1.total_adjusted_cost = tab1.total_adjusted_cost + t1.total
 FROM table1 tab1, 
      (SELECT tab3.name, tab3.add, SUM(tab2.amount) AS total
         FROM table2 tab2,
              table3 tab3,
              table4 tab4
        WHERE tab2.id = tab3.id
          AND tab3.id = tab4.id
          AND tab4.indicator = 'Y'
        GROUP BY tab3.name, tab3.add ) t1
WHERE tab1.id = t1.id;


SQL Error: ORA-00933: SQL command not properly ended 00933. 00000 -  "SQL
command not properly ended"

해결법

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

    1.병합을 사용해보십시오

    병합을 사용해보십시오

    merge into table1 tab1 
    using
    (
    SELECT tab3.name, tab3."add", SUM(tab2.amount) AS total
      FROM table2 tab2,
        table3 tab3 ,
        table4 tab4
      WHERE tab2.id        = tab3.id
      AND tab3.id            = tab4.id
      AND tab4.indicator             ='Y'
      GROUP BY tab3.name,
        tab3."add"
    )t1
    on(tab1.id      = t1.id)
    when matched then 
    update set tab1.total_adjusted_cost = tab1.total_adjusted_cost + t1.total
    
  2. ==============================

    2.그룹은 SQL의 키워드입니다. 당신은 그것을 탈출해야합니다.

    그룹은 SQL의 키워드입니다. 당신은 그것을 탈출해야합니다.

     UPDATE tab1 SET tab1.total_adjusted_cost = tab1.total_adjusted_cost + t1.total
    FROM table1 tab1, 
      (SELECT tab3.name, tab3."add", SUM(tab2.amount) AS total
      FROM table2 tab2,
        table3 tab3 ,
        table4 tab4
      WHERE tab2.id        = tab3.id
      AND tab3.id            = tab4.id
      AND tab4.indicator             ='Y'
      GROUP BY tab3.name,
        tab3."add"
    ) t1
    WHERE tab1.id      = t1.id
    
  3. ==============================

    3.난 당신이 또한 선택 키워드를 사용하는 것 같아요. 그리고 ANSI 표준을 따릅니다.

    난 당신이 또한 선택 키워드를 사용하는 것 같아요. 그리고 ANSI 표준을 따릅니다.

    UPDATE tab1 
        SET tab1.total_adjusted_cost = (select tab1.total_adjusted_cost + t1.total
                                       FROM table1 tab1, 
                                      (SELECT tab3.name, tab3."add", SUM(tab2.amount) AS total
                                      FROM table2 tab2 JOIN  table3 tab3 
                                                        ON tab2.id   = tab3.id
                                                       JOIN  table4 tab4 
                                                        ON  tab3.id  = tab4.id
                                       WHERE tab4.indicator ='Y'
                                       GROUP BY tab3.name,tab3."add") t1
        WHERE tab1.id = t1.id);  
    
  4. from https://stackoverflow.com/questions/31933765/oracle-update-query-using-join by cc-by-sa and MIT license