我有以下的表,我试图增加与下面的查询裁判列值。内部联接,最大不工作
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