Обновление таблицы в операторе выбора - PullRequest
5 голосов
/ 13 февраля 2009

Есть ли способ обновить таблицу в части select_expr запроса на выбор mysql. Вот пример того, чего я пытаюсь достичь:

SELECT id, name, (UPDATE tbl2 SET currname = tbl.name WHERE tbl2.id = tbl.id) FROM tbl;

Это дает мне ошибку в mysql, но я не понимаю, почему это не должно быть возможным, пока я не изменяю tbl.

Edit: Я поясню, почему я не могу использовать для этого обычную конструкцию.

Вот более сложный пример проблемы, над которой я работаю:

SELECT id, (SELECT @var = col1 FROM tbl2), @var := @var+1, 
(UPDATE tbl2 SET col1 = @var) FROM tbl WHERE ...

Таким образом, я в основном нахожусь в ситуации, когда я увеличиваю переменную во время оператора выбора и хочу отразить это изменение, поскольку я выбираю строки, поскольку я использую значение этой переменной во время выполнения. Приведенный здесь пример, вероятно, может быть реализован другими способами, но реальный пример, который я не буду публиковать здесь из-за слишком большого количества ненужного кода, нуждается в этой функциональности.

Ответы [ 3 ]

4 голосов
/ 13 февраля 2009

Если ваша цель - обновлять tbl2 каждый раз, когда вы запрашиваете tbl1, то лучший способ сделать это - создать хранимую процедуру для ее выполнения и обернуть ее в транзакцию, возможно, изменив уровни изоляции, если требуется атомарность.

Вы не можете вкладывать обновления в выборки.

1 голос
/ 13 февраля 2009

Каких результатов вы хотите? Результаты выбора или обновления.

Если вы хотите обновить на основе результатов запроса, вы можете сделать это следующим образом:

update table1 set value1 = x.value1 from (select value1, id from table2 where value1 = something)  as x where id = x.id
0 голосов
/ 03 августа 2016

НАЧАЛО СДЕЛКИ;

- Получим текущее значение

ВЫБРАТЬ значение ИЗ счетчиков, ГДЕ id = 1 ДЛЯ ОБНОВЛЕНИЯ;

- увеличить счетчик

Счетчики ОБНОВЛЕНИЙ SET значение = значение + 1 ГДЕ id = 1;

COMMIT;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...