有什么方法可以更新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语句期间要递增变量,并希望在执行过程中使用该变量的值时像在选择行时反映此更改。这里给出的示例可能可以通过其他方式实现,但是由于过多的不必要的代码,我不会在此处发布的实际示例需要此功能。
如果您的目标是每次查询tbl1时都更新tbl2,那么最好的方法是创建一个存储过程来完成它并将其包装在事务中,如果需要原子性,则可能更改隔离级别。
您不能将更新嵌套在选择中。