内部联接,最大不起作用

时间:2011-06-12 11:10:47

标签: mysql sql database

我有下表,我尝试使用以下查询增加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。

感谢。

3 个答案:

答案 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'