更新select语句中的表

时间:2009-02-13 13:22:00

标签: sql mysql

有没有办法更新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语句中递增一个变量,并且想要反映这个变化,因为我在选择行时因为我在执行期间使用了这个变量的值。这里给出的例子可能可以通过其他方式实现,但由于存在太多不必要的代码,我不会在这里发布的真实示例需要此功能。

3 个答案:

答案 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;