Прежде всего, на этот вопрос нет ответа ранее, так как ветка об ошибке 1093 показывает простой подзапрос. В моем случае я выполняю поиск следующей записи, ссылающейся на основную таблицу. Пожалуйста, не отмечайте его как дубликат, не прочитав сначала весь вопрос.
Мне нужно обновить записи таблицы с неправильной датой (1970-01-01), используя данные следующей записи (в соответствии с полем gkey, которое является последовательным первичным ключом int).
Итак, если я сделаю этот запрос:
SELECT aa.gkey,
aa.course_date,
(select course_date from BI.fact_training_event_tbl bb where bb.gkey = (
select min(cc.gkey)
from BI.fact_training_event_tbl cc
where cc.gkey > aa.gkey)) as next_date
from BI.fact_training_event_tbl aa
where course_date = '1970-01-01'
Он приводит записи правильно, как и ожидалось:
gkey course_date next_date
==== =========== =========
4103 1970-01-01 2017-03-23
4884 1970-01-01 2017-03-22
5047 1970-01-01 2017-03-23
Теперь мне нужно обновить поле course_date на next_date, но если я попытаюсь запустить следующее:
update BI.fact_training_event_tbl aa
set course_date =
(select course_date from BI.fact_training_event_tbl bb where bb.gkey = (
select min(cc.gkey)
from BI.fact_training_event_tbl cc
where cc.gkey > BI.fact_training_event_tbl.gkey))
where course_date = '1970-01-01'
Я получаю сообщение об ошибке:
Код ошибки 1093. Вы не можете указать целевую таблицу «BI.fact_training_event_tbl» для обновления в предложении FROM.
Я попытался сделать то, что рекомендуется здесь: Ошибка MySQL 1093. Невозможно указать целевую таблицу для обновления в предложении FROM, запрос вложен в другой:
update BI.fact_training_event_tbl as zz
set course_date =
(select course_date from
(select course_date from BI.fact_training_event_tbl as bb where bb.gkey = (
select min(cc.gkey)
from BI.fact_training_event_tbl as cc
where cc.gkey > gkey)) as aa )
where course_date = '1970-01-01'
но все, что я получаю, это установить date_course как null, а не next_date.
И если я попытаюсь сослаться на основную таблицу следующим образом:
where cc.gkey > BI.fact_training_event_tbl.gkey
or
where cc.gkey > zz.gkey
Пишет: Неизвестный столбец BI.fact_training_event_tbl.gkey или zz.gkey.
Любые идеи о том, как я могу осуществить это?