我有下表,我尝试使用以下查询增加ref列值。
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'
但如果是2,它总是设为0。
感谢。
答案 0 :(得分:1)
根据MySQL doc:
目前,您无法更新表格 并从a中的同一个表中选择 子查询。
但是很容易绕过:
UPDATE table1
SET ref = (
SELECT m.max_ref FROM (
SELECT (max(ref) + 1) AS max_ref FROM table1) m)
WHERE name= 'B'
答案 1 :(得分:1)
看起来您正在将整数列ref
设置为包含SQL语句的字符串:
set ref = '(SELECT (MAX(ref) + 1) AS max_ref FROM table1)'
当MySQL尝试将该字符串转换为整数时,它最终为0。
正确的方法是省略''
引号,这会让您遇到一个新问题:MySQL不允许您更新并从同一个表中进行选择。你会在其他答案中找到解决方案。
答案 2 :(得分:0)
尝试:
UPDATE `table1`
SET `ref` = (
SELECT `cur_ref` FROM(
SELECT MAX(`ref`)+1 `cur_ref` FROM `table1`
) `calc_table`
) WHERE `name` = 'B'