有没有办法更新mysql select查询的select_expr部分中的表。这是我想要实现的一个例子:
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 ...
所以我基本上处于这样一种情况:我在select语句中递增一个变量,并且想要反映这个变化,因为我在选择行时因为我在执行期间使用了这个变量的值。这里给出的例子可能可以通过其他方式实现,但由于存在太多不必要的代码,我不会在这里发布的真实示例需要此功能。
答案 0 :(得分:4)
如果您的目标是在每次查询tbl1时更新tbl2,那么最好的方法是创建一个存储过程来执行它并将其包装在事务中,如果需要原子性,可能会更改隔离级别。
您无法在选择中嵌套更新。
答案 1 :(得分:1)
你想要什么结果?选择或更新的结果。
如果您想根据查询结果进行更新,可以这样做:
update table1 set value1 = x.value1 from (select value1, id from table2 where value1 = something) as x where id = x.id
答案 2 :(得分:0)
START TRANSACTION;
- 让我们得到当前值
SELECT值FROM计数器WHERE id = 1 FOR UPDATE;
- 递增计数器
UPDATE计数器SET值=值+ 1 WHERE id = 1;
COMMIT;