Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle - Mettre à jour les lignes avec une valeur min dans le groupe d'une colonne d'une autre table

Votre instruction select est plus complexe qu'elle ne devrait l'être, vous obtiendrez le même ensemble de cette façon :

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;

Votre mise à jour peut être faite comme ceci, notez que la section "et existe" est facultative mais j'ai tendance à l'inclure pour rendre l'intention de la requête plus claire.

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