Mysql 更新数据的sql循环

Mysql 更新数据的sql循环,mysql,sql,Mysql,Sql,好吧,这真的很难实现 我有一个员工数据库。我希望更好地处理这些数据。我的意思是,表中的许多条目都有员工\销售\ id为?的行?。每个员工每次更换工作时都可以有多行。对于同一名员工,有些条目具有员工\销售\ id,而其他条目则没有。我想扫描我的表并更新所有?可以从另一行中选择值的位置。员工id对于每个员工都是唯一的 DB看起来像这样: Employee_id | employee_sales_id | name 1234 | abc | Jim S

好吧,这真的很难实现

我有一个员工数据库。我希望更好地处理这些数据。我的意思是,表中的许多条目都有员工\销售\ id为?的行?。每个员工每次更换工作时都可以有多行。对于同一名员工,有些条目具有员工\销售\ id,而其他条目则没有。我想扫描我的表并更新所有?可以从另一行中选择值的位置。员工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脚本。让它处理insert上的数据也很好。

试试看

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 = '?'
如果员工\u销售\u id随时间而更改,则您希望该行带有?若要使用给定员工id的最后一个员工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='?'

这个表上的其他列是什么?员工销售id出现在桌面上似乎毫无意义。员工id不是唯一的,它究竟是如何成为主键的?对不起。它不是主键。我的意思是每个员工都有一个唯一的员工id。@codeNinja您能给我们一个表中列的列表吗?您可能应该将员工ID与其他地方的员工ID关联起来,特别是如果给定员工ID的员工ID从未随时间变化,而对于给定的员工id,此表其他列上的其他值将随时间而更改。如果是这种情况,则应删除此表上的“员工id”列,并创建第二个表“员工id”,即“员工id”,每个员工id有一行。员工id会随着员工的晋升而更改。其他列是{email,phone,job_code,job_start_date,job_end_date,job_status}我认为这是sql server语法,它在mysql中不起作用。这不起作用。抛出语法错误。{错误代码:1064您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解要使用的正确语法,第3行的“从选择不同的员工id,从员工那里选择销售id,从员工那里选择销售id”}他说,如果员工从一个职位晋升到另一个职位,员工的销售id将发生变化。@ShWiVeL是的,我正在处理他的桌子,这是一个糟糕的设计。但这是另一个问题。