2012-10-03 3 views
0

를 반환하지 않습니다병합 내가 2 개 테이블이 올바른 데이터

(1, 'Dan', 'Morgan', 10, 100000); 
(2, 'Helen', 'Lofstrom', 20, 100000); 
(3, 'Akiko', 'Toyota', 20, 50000); 
(4, 'Jackie', 'Stough', 20, 40000); 
(5, 'Richard', 'Foote', 20, 70000); 
(6, 'Joe', 'Johnson', 20, 30000); 
(7, 'Clark', 'Urling', 20, 90000); 

CREATE TABLE bonuses (
employee_id NUMBER, bonus NUMBER DEFAULT 100); 

표 보너스 것은 값이 있습니다

(1,100); 
(2,100); 
(4,100); 
(6,100); 
(7,100); 

을 그리고는 병합 기반 않았다 보너스 테이블 :

MERGE INTO bonuses b 
USING (
    SELECT employee_id, salary, dept_no 
    FROM employee 
    WHERE dept_no =20) e 
ON (b.employee_id = e.employee_id) 
WHEN MATCHED THEN 
    UPDATE SET b.bonus = e.salary * 0.1 
    DELETE WHERE (e.salary < 40000) 
WHEN NOT MATCHED THEN 
    INSERT (b.employee_id, b.bonus) 
    VALUES (e.employee_id, e.salary * 0.05) 
    WHERE (e.salary > 40000); 

그리고 내가 에서 선택 * 보너스에서 *

EMPLOYEE_ID BONUS 
------------------ 
1   100 
2   10000 
3   2500 
4   4000 
5   3500 
7   9000 

"내 보너스는 employee_id # 6에 어디에 기록됩니까?"

답변

0

DELETE WHERE (e.salary < 40000)? 그리고 평등을 포함하도록 조건 중 하나를 만들어야합니다. 누구나 급여가 재키의 것처럼 단지 40K 일 수 있습니다.

+0

고마워요! 실수로 삭제 코드를 포함해야합니다. –