"一下操作",估计你的意思是想一条sql语句就完成.
这个......想不出来

解决方案 »

  1.   

    我写错了,是“以下”的意思
    可以用多条sql语句。
      

  2.   

    估计可以用用户变量来做,通过用户变量记住刚处理完的id值,对当前记录判断是否id与记住的相同...
    select命令下,我做过类似的事情,但问题是在update命令中,可能会有些其他限制。楼主可以参考一下我的一个问题:
    http://community.csdn.net/Expert/TopicView3.asp?id=4139675
      

  3.   

    我做了这样一个试验:
    表结构如下:
    mysql> desc test;
    +---------+------------------+------+-----+---------+-------+
    | Field   | Type             | Null | Key | Default | Extra |
    +---------+------------------+------+-----+---------+-------+
    | id      | varchar(10)      |      |     |         |       |
    | state   | varchar(10)      |      |     |         |       |
    | num     | int(10) unsigned |      |     | 0       |       |
    | msg     | varchar(45)      |      |     |         |       |
    | records | int(10) unsigned |      | PRI | 0       |       |
    +---------+------------------+------+-----+---------+-------+
    写入三条记录后如下:+---------+---------+-----+-----+---------+
    | id      | state   | num | msg | records |
    +---------+---------+-----+-----+---------+
    | 6004629 | SUCCESS |  10 | 1   |       1 |
    | 6004629 | SUCCESS |  10 | 2   |       2 |
    | 6004629 | SUCCESS |  10 | 5   |       3 |
    +---------+---------+-----+-----+---------+mysql> update test set num='0' where id='6004629' and records>1;
    Query OK, 2 rows affected (0.01 sec)
    Rows matched: 2  Changed: 2  Warnings: 0mysql> select * from test;
    +---------+---------+-----+-----+---------+
    | id      | state   | num | msg | records |
    +---------+---------+-----+-----+---------+
    | 6004629 | SUCCESS |  10 | 1   |       1 |
    | 6004629 | SUCCESS |   0 | 2   |       2 |
    | 6004629 | SUCCESS |   0 | 5   |       3 |
    +---------+---------+-----+-----+---------+mysql> update test set num='0' where id='6004629' and
        -> records>(select min(records) from test where id='6004629');
    ERROR 1093 (HY000): You can't specify target table 'test' for update in FROM cla
    use
    可能update语句不支持子查询?
    mysql> select min(records) from test where id='6004629';
    +--------------+
    | min(records) |
    +--------------+
    |            1 |
    +--------------+
    如果真的改的话,可以手动,如果你不怕麻烦。呵呵!
      

  4.   

    楼上的方法就不错,照下面的sql执行,就能得到你要的结果:# MySQL-Front Dump 2.5
    #
    # Host: 192.168.0.200   Database: test1
    # --------------------------------------------------------
    # Server version 4.0.18-nt
    #
    # Table structure for table 'test'
    #CREATE TABLE test (
      id varchar(10) NOT NULL default '',
      state varchar(10) NOT NULL default '',
      num int(10) unsigned NOT NULL default '0',
      msg varchar(50) NOT NULL default ''
    ) TYPE=MyISAM;#
    # Dumping data for table 'test'
    #INSERT INTO test VALUES("6004629", "SUCCESS", "10", "TEXT");
    INSERT INTO test VALUES("6004629", "SUCCESS", "10", "TEXT");
    INSERT INTO test VALUES("6004629", "SUCCESS", "10", "TEXT");
    INSERT INTO test VALUES("6007210", "SUCCESS", "400", "TEXT");
    INSERT INTO test VALUES("6007210", "SUCCESS", "400", "TEXT");
    INSERT INTO test VALUES("6007210", "FAILED", "400", "TEXT");#
    # select test data 
    #
    select * from test;#
    # add a idno and add primary key
    #
    ALTER TABLE `test` ADD `idno` INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY(id,idno);#
    # select test data 
    #
    select * from test;#
    # update test
    #
    update test set num=0 where idno!=1;#
    # drop primary key & idno
    #
    ALTER TABLE `test` DROP PRIMARY KEY, DROP idno;#
    # select test data 
    #
    select * from test;
      

  5.   

    看看执行结果:
    mysql> # MySQL-Front Dump 2.5
    mysql> #
    mysql> # Host: 192.168.0.200   Database: test1
    mysql> # --------------------------------------------------------
    mysql> # Server version 4.0.18-nt
    mysql> 
    mysql> 
    mysql> #
    mysql> # Table structure for table 'test'
    mysql> #
    mysql> 
    mysql> CREATE TABLE test (  id varchar(10) NOT NULL default '',  state varchar(10) NOT NULL default '',  num int(10) unsigned NOT NULL default '0',  msg varchar(50) NOT NULL default '') TYPE=MyISAM;
    Query OK, 0 rows affected (0.05 sec)mysql> 
    mysql> 
    mysql> 
    mysql> #
    mysql> # Dumping data for table 'test'
    mysql> #
    mysql> 
    mysql> INSERT INTO test VALUES("6004629", "SUCCESS", "10", "TEXT");
    Query OK, 1 row affected (0.02 sec)mysql> INSERT INTO test VALUES("6004629", "SUCCESS", "10", "TEXT");
    Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO test VALUES("6004629", "SUCCESS", "10", "TEXT");
    Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO test VALUES("6007210", "SUCCESS", "400", "TEXT");
    Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO test VALUES("6007210", "SUCCESS", "400", "TEXT");
    Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO test VALUES("6007210", "FAILED", "400", "TEXT");
    Query OK, 1 row affected (0.00 sec)mysql> 
    mysql> #
    mysql> # select test data 
    mysql> #
    mysql> select * from test;
    +---------+---------+-----+------+
    | id      | state   | num | msg  |
    +---------+---------+-----+------+
    | 6004629 | SUCCESS |  10 | TEXT |
    | 6004629 | SUCCESS |  10 | TEXT |
    | 6004629 | SUCCESS |  10 | TEXT |
    | 6007210 | SUCCESS | 400 | TEXT |
    | 6007210 | SUCCESS | 400 | TEXT |
    | 6007210 | FAILED  | 400 | TEXT |
    +---------+---------+-----+------+
    6 rows in set (0.00 sec)mysql> 
    mysql> #
    mysql> # add a idno and add primary key
    mysql> #
    mysql> ALTER TABLE `test` ADD `idno` INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY(id,idno);
    Query OK, 6 rows affected (0.10 sec)
    Records: 6  Duplicates: 0  Warnings: 0mysql> 
    mysql> #
    mysql> # select test data 
    mysql> #
    mysql> select * from test;
    +---------+---------+-----+------+------+
    | id      | state   | num | msg  | idno |
    +---------+---------+-----+------+------+
    | 6004629 | SUCCESS |  10 | TEXT |    1 |
    | 6004629 | SUCCESS |  10 | TEXT |    2 |
    | 6004629 | SUCCESS |  10 | TEXT |    3 |
    | 6007210 | SUCCESS | 400 | TEXT |    1 |
    | 6007210 | SUCCESS | 400 | TEXT |    2 |
    | 6007210 | FAILED  | 400 | TEXT |    3 |
    +---------+---------+-----+------+------+
    6 rows in set (0.01 sec)mysql> 
    mysql> #
    mysql> # update test
    mysql> #
    mysql> update test set num=0 where idno!=1;
    Query OK, 4 rows affected (0.01 sec)
    Rows matched: 4  Changed: 4  Warnings: 0mysql> 
    mysql> #
    mysql> # drop primary key & idno
    mysql> #
    mysql> ALTER TABLE `test` DROP PRIMARY KEY, DROP idno;
    Query OK, 6 rows affected (0.10 sec)
    Records: 6  Duplicates: 0  Warnings: 0mysql> 
    mysql> #
    mysql> # select test data 
    mysql> #
    mysql> select * from test;
    +---------+---------+-----+------+
    | id      | state   | num | msg  |
    +---------+---------+-----+------+
    | 6004629 | SUCCESS |  10 | TEXT |
    | 6004629 | SUCCESS |   0 | TEXT |
    | 6004629 | SUCCESS |   0 | TEXT |
    | 6007210 | SUCCESS | 400 | TEXT |
    | 6007210 | SUCCESS |   0 | TEXT |
    | 6007210 | FAILED  |   0 | TEXT |
    +---------+---------+-----+------+
    6 rows in set (0.01 sec)mysql> exit
      

  6.   

    前段时间太忙,没来csdn。没想到后来有这么多高手关注这个问题,还提出了令人震撼的解决办法,真的非常感谢。可惜分给的太少了。我后来做了个临时表好歹是把这个问题解决了。再次表示谢谢。