В этом выражении:
WITH bad_employee_values AS (SELECT * FROM employee WHERE employee_id = @bad_emp_id)
UPDATE employee SET
employee.employment_date = COALESCE(employee.employment_date, bad_employee_values.employment_date),
WHERE employee_id = @core_emp_id;
Вы определяете CTE bad_employee_values
, но не используете его в части запроса UPDATE
, поэтому вы не можете получить доступ к его столбцам: для MySQL bad_employee_values.employment_date
неизвестно.
Похоже, вы могли бы просто избежать CTE здесь.Вы можете просто самостоятельно присоединиться к таблице, например, так:
UPDATE employee e_core
INNER JOIN employee e_bad ON e_bad.employee_id = @bad_emp_id
SET e_core.employment_date = e_bad.employment_date,
WHERE employee_id = @core_emp_id AND e_core.employment_date IS NULL
Этот запрос просто выберет запись, обозначенную @core_emp_id
, объединит ее с соответствующей «плохой» записью и скопирует значение employment_date
.Второе условие в предложении WHERE
запрещает выбор записей, для которых employment_date
не равно нулю.