Проблема в том, что MySQL, по какой-то бессмысленной причине, не позволяет вам писать запросы, подобные этому:
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM myTable
INNER JOIN ...
)
То есть, если вы делаете UPDATE
/ INSERT
/ DELETE
для таблицы, вы не можете ссылаться на эту таблицу во внутреннем запросе (вы можете однако ссылка на поле из этой внешней таблицы ...)
Решение состоит в том, чтобы заменить экземпляр myTable
в подзапросе на (SELECT * FROM myTable)
, например,
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM (SELECT * FROM myTable) AS something
INNER JOIN ...
)
Это, очевидно, приводит к тому, что необходимые поля неявно копируются во временную таблицу, поэтому это разрешено.
Я нашел это решение здесь . Примечание к этой статье:
Вы не хотите просто SELECT * FROM table
в подзапросе в реальной жизни; Я просто хотел сохранить примеры простыми. На самом деле, вам нужно только выбрать столбцы, которые вам нужны в этом самом внутреннем запросе, и добавить хорошее предложение WHERE
, чтобы ограничить результаты.