본문 바로가기
MySql

MySQL 단일 행 하위 쿼리를 반환하는 업데이트 문은 둘 이상의 행을 반환합니다.

by 베이스 공부 2020. 12. 8.
반응형

저는 SQL을 처음 접했고 쿼리에 갇혀 있습니다.

직원, 부서 및 급여가 3 개 있습니다. 이 조건을 지정하여 salary_paid 테이블의 보너스 열을 업데이트하려고합니다.

give 10% bonus on total salary to the employees who are not in IT departments. 

나는이 쿼리를 생각 해냈다

update salary_paid 
set bonus=(select (0.1*total_salary) "Bonus" 
           from salary_paid, departments, employees
           where 
               employees.department_id=departments.department_id and 
               employees.employee_id=salary_paid.employee_id and
               departments.department_name!='IT')
           ;

그러나이 오류를 반환합니다.

ORA-01427 : 단일 행 부질의는 둘 이상의 행을 반환합니다

나는 이것에 대해 완전히 단서가 없습니다. 도와주세요. 미리 감사드립니다

 

해결 방법

 

내부 쿼리 (select (0.1 * total_salary) salary_paid에서 "Bonus"가 둘 이상의 값을 반환하므로 bounus 열에 할당 할 수 없습니다.

대신 이와 같은 조인을 사용하여 업데이트하십시오.

   UPDATE 
    (SELECT salary_paid.bonus as oldBonus, 0.1*salary_paid.total_salary as newBounus
     FROM salary_paid
     INNER JOIN employees
     ON salary_paid.employee_id = employees.employee_id
     INNER JOIN departments
     ON departments.department_id = employees.department_id 
     WHERE departments.department_name != 'IT'
    ) t
    SET t.oldBonus= t.newBounus

 

참조 페이지 https://stackoverflow.com/questions/22602787

 

 

반응형

댓글