问题描述
|
我有下表,我尝试通过以下查询增加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。
谢谢。
解决方法
根据MySQL文档:
目前,您无法更新表格
然后从
子查询。
但是,很容易绕开:
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结尾。
正确的方法是省略4引号,这给您带来了一个新问题:MySQL不允许您更新和选择同一张表。您将在其他两个答案中找到解决方案。
, 尝试:
UPDATE `table1`
SET `ref` = (
SELECT `cur_ref` FROM(
SELECT MAX(`ref`)+1 `cur_ref` FROM `table1`
) `calc_table`
) WHERE `name` = \'B\'