2011-06-12 39 views
1

我有以下的表,我試圖增加與下面的查詢裁判列值。內部聯接,最大不工作

orderid name age address ref 
1  A 22 a1  1 
2  B 21 b1  0 

update table1 
set ref = 
'(SELECT (MAX(ref) + 1) AS max_ref FROM table1)' 
where name= 'B' 

但它總是被設置爲0,而不是如果2

感謝。

+2

你真的在引用這個表達嗎?我不知道MySQL,但是這看起來很奇怪(並且不應該在任何其他DBMS中完成) – erikkallen 2011-06-12 11:20:35

回答

0

嘗試:

UPDATE `table1` 
SET `ref` = (
     SELECT `cur_ref` FROM(
       SELECT MAX(`ref`)+1 `cur_ref` FROM `table1` 
     ) `calc_table` 
) WHERE `name` = 'B' 
1

根據MySQL doc

目前,你無法更新表 並在 子查詢中從同一個表中選擇。

但是它很容易繞過:

UPDATE table1 
SET ref = (
    SELECT m.max_ref FROM (
     SELECT (max(ref) + 1) AS max_ref FROM table1) m) 
WHERE name= 'B' 
1

它看起來像你的整數列ref設置爲一個字符串包含SQL語句:

set ref = '(SELECT (MAX(ref) + 1) AS max_ref FROM table1)' 

當MySQL試圖轉換該字符串的整數,它最終以0

正確的方法是省略'' QUOT這會給你帶來一個新問題:MySQL不允許你從同一張表中進行更新和選擇。你會在其他兩個答案中找到解決方案。