好好让这个工作真正艰难。
我有一个员工数据库。我希望更好地调整这些数据。我的意思是表中的许多条目都有employee_sales_id为"?"的行。每个员工可以有多行(每次他们更换工作)。对于同一个员工,有些条目有employee_sales_id而有些条目没有。我想扫描我的表并更新所有"?"可以从另一行中选择值。 Employee_id对每位员工都是唯一的。
DB看起来像这样:
Employee_id | employee_sales_id | name
1234 | abc | Jim Smith
1234 | abc | Jim Smith
1234 | ? | Jim Smith
1234 | abc | Jim Smith
你看到第3行。我想修复它并用abc更新它。有很多员工,所以我不能手动这样做。它必须是一个sql脚本。在插入时处理数据也很棒。
答案 0 :(得分:0)
尝试
UPDATE employee
SET Employee_sales_id = ES.employee_sales_id
FROM
(SELECT DISTINCT Employee_id, employee_sales_Id
FROM Employee
where employee_sales_id <> '?') ES
INNER JOIN Employee E on E.Employee_id = ES.Employee_id
WHERE E.employee_sales_id = '?'
顺便提一下,我假设您在Employee表上有某种主键和/或其他属性,我们在您的问题文本中没有看到,否则您的表中会有重复的行,这会在某处导致问题
<强>更新强> 对不起,我正在使用Sql Server。没有看到你的问题与MySql有关。
答案 1 :(得分:0)
尝试:
update employees x join (select employee_id,
min(employee_sales_id) as good_id,
jobcode,
job_start_date
from employees
where employee_sales_id <> '?') y on x.employee_id = y.employee_id
and x.jobcode = y.jobcode
and x.job_start_date = y.job_start_date
set x.employee_sales_id = y.employee_sales_id
where x.employee_sales_id = '?'
如果employee_sales_id随着时间的推移而变化,那么你会希望行与?要使用给定employee_id的最后一个employee_sales_id值填充,其中作业与当前作业和开始日期相同,我假设。
答案 2 :(得分:0)
UPDATE employee
JOIN
(SELECT employee_id,employee_sales_id FROM employee
GROUP BY employee_id
HAVING COUNT(employee_sales_id)>1
AND employee_sales_id!='?')x
ON employee.employee_id=x.employee_id
SET employee.employee_sales_id=x.employee_sales_id
WHERE employee.employee_sales_id='?'