MySQL одновременный SELECT и UPDATE при работе с одной таблицей

MySQL не позволит вам сделать выборку данных SELECT из таблицы в тот момент, когда одновременно делается обновление данных UPDATE той же таблицы.
Т.е. нижеприведенный пример – недопустимый:
UPDATE table_1 AS tbl_1
    SET tbl_1.cnt = (
        SELECT COUNT(*) FROM table_1 AS tbl_2
        WHERE tbl_1.type = tbl_2.type
    );

Error: You can't specify target table 'tbl_1' for update in FROM clause

В такой ситуации нужно использовать связывание таблицы с собой. Присоединяемая таблица будет реализована через временную таблицу, поэтому подзапрос откроет и закроет таблицу до того, как UPDATE откроет её. Таким образом данный запрос будет успешно выполнен:
UPDATE table_1 AS tbl_1
    INNER JOIN(
        SELECT type, COUNT(*) AS cnt
        FROM table_1
        GROUP BY type
    ) AS tbl_2 USING(type)
SET tbl_1.cnt = tbl_2.cnt;
Теги:
SELECT, UPDATE
Добавлено: 12 Июля 2018 21:23:23 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...