日期:2014-05-16  浏览次数:20713 次

UPDATE下不能SELECT本表的解决方法
UPDATE fanwe_share SET px = (select max(px)+1 from fanwe_share) WHERE share_id = 2

我是想将某值改为当前列的最大值+1.。。。。

不过好像UPDATE下不能SELECT本表,,,,

------解决方案--------------------
楼主要的是这个吗?试试看:
SQL code
mysql> select * from test;
+------+------+
| id   | col2 |
+------+------+
|    1 |    2 |
|    2 |    1 |
|    1 |    3 |
|    3 |   14 |
+------+------+
4 rows in set (0.00 sec)

mysql> select max(col2) into @col2 from test;update test set col2=@col2+10 where id=3;
Query OK, 1 row affected (0.00 sec)

Query OK, 1 row affected (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from test;
+------+------+
| id   | col2 |
+------+------+
|    1 |    2 |
|    2 |    1 |
|    1 |    3 |
|    3 |   24 |
+------+------+
4 rows in set (0.00 sec)

------解决方案--------------------
UPDATE fanwe_share,(select max(px)+1 AS MA from fanwe_share) B
SET A.px =B.MA WHERE share_id = 2
------解决方案--------------------
探讨

还有问一下,
我想先用SELECT得到的值赋给变量,然后UPDATE直接调用变量,,但下面这样定不行耶,好像每条语句用“;”结束后下一条语句就调用不了这个语句的变量了。是不是呀,,其实用触发器来解决最好了,但我不会,。。。
select @id=max(px) as a from fanwe_share;
UPDATE fanwe_share SET px =@id+1 WHERE ……

------解决方案--------------------
select @id:=max(px) from fanwe_share;
UPDATE fanwe_share SET px=@id+1 WHERE share_id = 2;

这样不行么,你试过了? @id:=