2009-02-13 65 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;