У меня есть таблица устаревших марок/моделей, которые объединены вместе, но я создал две новые таблицы с разными марками и моделями, которые я хотел бы использовать для обновления таблицы устаревших марок/моделей, чтобы облегчить обновления. Таблицы выглядят так:
===============================================
| 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 |
-----------------------------
What I want to do is UPDATE
the tb_legacy
table with the f_makeID
and f_modelID
fields so that I end up with the tb_legacy
field looking like this:
===============================================
| tb_legacy |
===============================================
| f_makemodel | f_makeID | f_modelID |
|----------------------|----------|-----------|
| CHEVROLET CAPRICE | 1 | 1 |
| CHEVROLET 1500 TRUCK | 1 | 2 |
| FORD MUSTANG | 2 | 3 |
-----------------------------------------------
У меня есть скрипт SQL, показывающий запрос 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)
)
Но приведенный выше запрос возвращает следующую ошибку:
Error: ER_UPDATE_TABLE_USED: You can't specify target table 'tb_legacy' for update in FROM clause
Я думаю, что это близко, но нам нужно СОЕДИНИТЬ tb_makes и tb_models, а не tb_makes с tb_legacy, а также СОЕДИНИТЬ таблицу tb_models.
@Beems, что вы подразумеваете под это близко. Это даже не запускается, потому что это не синтаксис MySql.
@forpas Я пытался быть милым, потому что это дало мне некоторые возможности для дальнейших исследований. И нет, это не я проголосовал за этот ответ.