sql循环更新数据

时间:2014-02-22 19:30:59

标签: mysql sql

好好让这个工作真正艰难。

我有一个员工数据库。我希望更好地调整这些数据。我的意思是表中的许多条目都有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脚本。在插入时处理数据也很棒。

3 个答案:

答案 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='?'

SQL FIDDLE