[英]sql loop to update data
好了,要完成这项工作真的很艰难。
我有一个员工数据库。 我希望更好地处理此数据。 我的意思是,表中的许多条目都有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
您会看到第三行。 我想修复该问题并用abc更新。 有很多员工,所以我不能手动做到这一点。 它必须是一个sql脚本。 使其在插入时处理数据也很好。
尝试
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有关的问题。
尝试:
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值填充,其中工作与当前工作和开始日期相同。
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='?'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.