Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 递增序列号最大的列的值_Mysql_Sql - Fatal编程技术网

Mysql 递增序列号最大的列的值

Mysql 递增序列号最大的列的值,mysql,sql,Mysql,Sql,我有一个表(table_name),其中的列是Sno、count。count的默认值为1。 如果要增加Sno所在的count列的值,请说1 UPDATE table_name SET count=count+1 where Sno=1; 它工作 但是如果我想增加count的值,其中Sno是Max呢 Sno count 1 2 2 1 基本上,我需要帮助创建以下混合: UPDATE table_name SET count=count+1 where Sno=1; & 比如

我有一个表(table_name),其中的列是Sno、count。count的默认值为1。 如果要增加Sno所在的count列的值,请说1

UPDATE table_name SET count=count+1 where Sno=1;
它工作

但是如果我想增加count的值,其中Sno是Max呢

Sno  count
 1    2
 2    1
基本上,我需要帮助创建以下混合:

UPDATE table_name SET count=count+1 where Sno=1;
&

比如:

update table_name
  set count = count+1
where sno = (select max(sno) from table_name)
是显而易见的方法(在大多数RDBMS中都有效),但在MySQL中不起作用:

无法为FROM子句中的更新指定目标表“table\u name”

有关有效的方法,请参见基于联接或进一步间接寻址的答案。

使用以下方法:

UPDATE table_name t1 
INNER JOIN (SELECT MAX(t2.Sno) AS max_Sno 
            FROM table_name t2) AS t3 ON t3.max_Sno = t1.Sno 
SET t1.count = t1.count + 1;

我还没有测试过这个,我正在打电话,但我认为你需要为此而跳出一个恼人的圈套

对要更新的表使用子查询,但通过将子查询嵌套在另一个子查询中,对MySQL“隐藏”该事实

UPDATE
  table_name
SET
  count = count + 1
WHERE
  Sno = (SELECT Sno FROM (SELECT MAX(Sno) AS Sno FROM table_name) deref)
JOIN
方法也有效(来自@MadhurBhaiya),如下所示


MySQL不允许您这样做。您正在从正在写入的表中读取数据,并出现错误
您无法在from子句中为更新指定目标表“table\u name”
@MatBailie继续尝试并避免MySQL的另一个原因!(有一天我可能会成功!)MySQL 8看起来很有希望。MySQL说:#1093-表“Table_name”被指定两次作为“UPDATE”的目标和单独的数据源。
UPDATE
  table_name
SET
  count = count + 1
WHERE
  Sno = (SELECT Sno FROM (SELECT MAX(Sno) AS Sno FROM table_name) deref)