彩虹制造者
发布于

来自其他表的多个更新表

有以下简化和简化的表格:

table_a:
 label  type  code
 -----  ----  ----
'----' 'ab'  '0123' <-- label will     be changed
'----' 'ab'  '8234' <-- label will     be changed
'----' 'ab'  '9176' <-- label will not be changed
'----' 'cd'  '4554' <-- label will     be changed
'----' 'cd'  '5122' <-- label will     be changed
'----' 'cd'  '7777' <-- label will not be changed

table_b:
 label  type  code
 -----  ----  ----
'KOTA'  'ab' '01'  <-- will     match
'KOTA'  'ab' '8'   <-- will     match
'KOTA'  'ab' '923' <-- will not match
'RRHW'  'cd' '4'   <-- will     match
'WWUP'  'cd' '512' <-- will     match

使用以下查询更新表 a:

UPDATE table_a AS a
  RIGHT JOIN table_b AS b
     ON a.type = b.type
    AND LEFT(a.code, LENGTH(b.code)) = b.code
    SET a.label = b.label;

它有效,但在我们数据库中的实际情况下,这非常慢。我无法更改数据库(添加索引或 . . . )。有没有更好(更快)的方法来更新表 a?

浏览 (23)
点赞
收藏
1条评论
Klustron小助手
试试这个 加入 char 时性能不佳的常见原因是排序规则和/或字符集。如果您无法更改 db,则可以尝试根据您的目的更改排序规则,如下所示: UPDATE table_a AS a INNER JOIN ( select type, label, code collate collation_used_by_a.code from table_b ) AS b ON a.type = b.type AND LEFT(a.code, LENGTH(b.code)) = b.code SET a.label = b.label;
点赞
评论