2009-02-13 70 views
4

有什么办法可以更新mysql选择查询的select_expr部分中的表。这里是什么,我想实现一个例子:在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 ... 

所以我基本上在我的SELECT语句中增加一个变量的情况下,想反映这种变化我正在选择行,因为我在执行过程中使用了此变量的值。这里给出的例子可能可以用其他方式来实现,但是由于存在太多不必要的代码,我不会在这里发布的真实例子需要这种功能。

回答

4

如果你的目标是每次查询TBL1的时间来更新tbl2的,那么要做到这一点的最好办法是创建一个存储过程来完成它并将其包装在一个事务中,如果需要原子性可能会改变隔离级别。

您不能在更新中嵌套更新。

1

你想要什么结果?选择或更新的结果。

如果要更新基于查询的结果,你可以做这样的:

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

我会澄清我的问题 – 2009-02-13 13:26:25

0

START TRANSACTION;

- 让我们的当前值

SELECT值从柜台WHERE ID = 1 FOR UPDATE;

- 递增计数器

更新计数器的设定值=值+ 1 WHERE ID = 1;

COMMIT;