2011-06-12 73 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不允许你从同一张表中进行更新和选择。你会在其他两个答案中找到解决方案。