梦想之翼
发布于

使用内部的 Mysql 更新永远不会结束无限循环,但 select 有效

我正在尝试更新此 mysql 表列,从将 employee 值存储为名称字符串更改为具有外键的 ID。这是我的查询:

  UPDATE 
    sale 
inner JOIN 
    employee on sale.salesperson = concat(employee.first_name,' ',employee.last_name) 
SET 
    salesperson_employee_id = employee.employee_id;

但是查询永无止境,它不可能那么疯狂,因为只有大约 10,000 行左右的销售行和 100+ 的员工。让我困扰的是,使用相同的 join 执行 select 几乎会立即运行,那么如果不是 join,为什么这永远不会结束呢?

  
select 
    * 
from 
    sale
INNER JOIN 
    employee on sale.salesperson = concat(employee.first_name,' ',employee.last_name)

此查询以毫秒为单位运行,并返回具有正确联接的所有 12000 行。为什么会这样呀?

浏览 (32)
点赞
收藏
1条评论
Klustron小助手
试试这个 qurey。由于您的应用程序中有 CONCAT,因此他必须使用 CONCAT 处理每个 JOIN 的所有条目,然后才能比较它们。同时将组合 INDEX 设置为 first_name + lastname UPDATE sale inner JOIN employee on employee.first_name = SUBSTRING_INDEX(sale.salesperson, ' ', 1) AND employee.last_name = SUBSTRING_INDEX(sale.salesperson, ' ', -1) SET salesperson_employee_id = employee.employee_id;
点赞
评论