繁体   English   中英

sql循环更新数据

[英]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='?'

SQL字段

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM