2016-04-06 8 views
0

私はこのシナリオに直面しています:テーブル従業員はjoined_date列を持っています。テーブル予約には、booking_date列とEmployeeへの外部キー(employee_id)があります。従業員は、そのjoined_date列にいくつかのNULL値を持ちます。私はそれらの従業員の最初のbooking_dateの値を記入したいと思います。どのようにできるのか? FYIOracle - 別のテーブルの列のグループの最小値を持つ行を更新します

SELECT emp.employee_id, emp.joining_date, temp2.booking_date FROM employee emp 
    LEFT JOIN (SELECT bo.employee_id, bo.booking_date FROM booking bo 
    INNER JOIN (SELECT employee_id, MIN(booking_date) mindate FROM booking GROUP BY employee_id) temp1 
    ON bo.employee_id = temp1.employee_id AND bo.booking_date = temp1.mindate) temp2 
    ON emp.employee_id = temp2.employee_id 
WHERE emp.joining_date IS NULL; 

しかし、私は、この複合体は更新ステートメントに選択入れて苦労している:私は複雑で問い合わせることができ がjoining_date以下のようにNULLである従業員の最初のbooking_dateを抽出するためのステートメントに参加します:

UPDATE employee emp 
SET emp.joining_date = (SELECT ...) 
WHERE emp.joining_date IS NULL; 

答えて

0

SELECT文を使用すると、同じセットをこのようになります、それは必要以上に複雑です:

SELECT emp.employee_id,min(bo.booking_date) booking_date 
FROM employee emp 
    LEFT JOIN booking bo 
    ON bo.employee_id = emp.employee_id 
WHERE emp.joining_date is NULL 
GROUP BY emp.employee_id; 

このように更新することができます。「存在する」セクションはオプションですが、クエリの意図をより明確にするために追加することがあります。

UPDATE employee emp 
    SET emp.joining_date = 
    (SELECT min(booking_date) from booking bo where bo.employee_id = emp.employee_id) 
WHERE emp.joining_date IS NULL 
    and exists(select * from booking bo where bo.employee_id = emp.employee_id); 
関連する問題