在本声明中:
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
子句防止记录
就业日期
所选内容不为空。