我有以下的表,我試圖增加與下面的查詢裁判列值。內部聯接,最大不工作
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
感謝。
我有以下的表,我試圖增加與下面的查詢裁判列值。內部聯接,最大不工作
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
感謝。
嘗試:
UPDATE `table1`
SET `ref` = (
SELECT `cur_ref` FROM(
SELECT MAX(`ref`)+1 `cur_ref` FROM `table1`
) `calc_table`
) WHERE `name` = 'B'
根據MySQL doc:
目前,你無法更新表 並在 子查詢中從同一個表中選擇。
但是它很容易繞過:
UPDATE table1
SET ref = (
SELECT m.max_ref FROM (
SELECT (max(ref) + 1) AS max_ref FROM table1) m)
WHERE name= 'B'
它看起來像你的整數列ref
設置爲一個字符串包含SQL語句:
set ref = '(SELECT (MAX(ref) + 1) AS max_ref FROM table1)'
當MySQL試圖轉換該字符串的整數,它最終以0
正確的方法是省略''
QUOT這會給你帶來一個新問題:MySQL不允許你從同一張表中進行更新和選擇。你會在其他兩個答案中找到解決方案。
你真的在引用這個表達嗎?我不知道MySQL,但是這看起來很奇怪(並且不應該在任何其他DBMS中完成) – erikkallen 2011-06-12 11:20:35