MySQL - 基于串联 JOIN 更新父级 Table

MySQL - Update Parent Table Based on Concatenated JOIN

我有一个 table 的遗留 makes/models 连接在一起,但我已经构建了两个新的 table,它们具有我想使用的不同品牌和型号更新遗留 makes/models 的 table 以便更轻松地进行更新。 table 看起来像这样:

===============================================   
| tb_legacy                                   |   
===============================================   
| f_makemodel          | f_makeID | f_modelID | 
|----------------------|----------|-----------|   
| CHEVROLET CAPRICE    |   NULL   |   NULL    |
| CHEVROLET 1500 TRUCK |   NULL   |   NULL    |   
| FORD MUSTANG         |   NULL   |   NULL    | 
-----------------------------------------------

=============================    =============================
| tb_makes                  |    | tb_models                 |
=============================    =============================
| f_makeID | f_makename     |    | f_modelID | f_modelname   |
-----------------------------    -----------------------------
|    1     | Chevrolet      |    |     1     | Caprice       |
|    2     | Ford           |    |     2     | 1500 Truck    |
-----------------------------    |     3     | Mustang       |
                                 -----------------------------

我想要做的是 UPDATE tb_legacy table 与 f_makeIDf_modelID字段,这样我最终得到的 tb_legacy 字段如下所示:

===============================================   
| tb_legacy                                   |   
===============================================   
| f_makemodel          | f_makeID | f_modelID | 
|----------------------|----------|-----------|   
| CHEVROLET CAPRICE    |    1     |     1     |
| CHEVROLET 1500 TRUCK |    1     |     2     |   
| FORD MUSTANG         |    2     |     3     | 
-----------------------------------------------

我有一个 SQL Fiddle 显示 SELECT 查询: https://www.db-fiddle.com/f/pSJiMHNJPB6pBLfYTMCHgX/6

如何创建 UPDATE 查询来完成所需的结果?

编辑:

下面说明了我想做什么,但是

UPDATE tb_legacy
SET tb_legacy.f_makeID = 
(
    SELECT tb_makes.f_makeID
    FROM tb_legacy, tb_makes, tb_models
    WHERE tb_legacy.f_makemodel = CONCAT(tb_makes.f_makename,' ',tb_models.f_modelname)
),
tb_legacy.f_modelID = 
(
    SELECT tb_models.f_modelID
    FROM tb_legacy, tb_makes, tb_models
    WHERE tb_legacy.f_makemodel = CONCAT(tb_makes.f_makename,' ',tb_models.f_modelname)
)

但是上面的查询returns出现如下错误: Error: ER_UPDATE_TABLE_USED: You can't specify target table 'tb_legacy' for update in FROM clause

像这样

 update tb_legacy 
 set f_makeID=t.f_makeID, f_modelID=l.f_modelID
 from tb_makes t
 join tb_legacy l
 ON tb_legacy.f_makemodel = CONCAT(t.f_makename,' ',l.f_modelname)

您需要像这样将 tb_legacy 连接到其他 2 个表:

UPDATE tb_legacy lg
INNER JOIN tb_makes mk ON lg.f_makemodel LIKE CONCAT(mk.f_makename, ' ', '%')
INNER JOIN tb_models md ON lg.f_makemodel LIKE CONCAT('%', ' ', md.f_modelname)
SET lg.f_makeID = mk.f_makeID,
    lg.f_modelID = md.f_modelID

参见demo