2009-02-13 2 views
4

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

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

Это дает мне ошибку в MySQL, но я не вижу, почему это не должно быть возможно до тех пор, как я не меняется TBL.

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

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

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

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

ответ

4

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

Вы не можете вносить обновления при выборе.

1

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

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

update table1 set value1 = x.value1 from (select value1, id from table2 where value1 = something) as x where id = x.id 
+0

Я разъясню свой вопрос –

0

СДЕЛКА СНВ;

- Давайте получить текущее значение

ВЫБРАТЬ значение FROM счетчиков WHERE ID = 1 FOR UPDATE;

- Приращение счетчика

UPDATE счетчики Установленное значение = значение + 1, где ID = 1;

COMMIT;