Mysql 基于列值在一个查询中更新和删除

Mysql 基于列值在一个查询中更新和删除,mysql,sql,Mysql,Sql,您好,我是sql新手,我还在学习,所以任何建议或帮助都将非常感激。我试图删除状态为“已完成”的记录,然后根据删除的行数更新列减少特定列的数量。我的桌子在下面 tblA numberx Address Status 0001 AddA New 0002 AddA Complete 0003

您好,我是sql新手,我还在学习,所以任何建议或帮助都将非常感激。我试图删除状态为“已完成”的记录,然后根据删除的行数更新列减少特定列的数量。我的桌子在下面

tblA
    numberx             Address          Status
    0001                 AddA              New       
    0002                 AddA              Complete
    0003                 AddA              Not Done
    0001                 AddB              Complete
    0002                 AddB              Complete
    0003                 AddB              New
    0001                 AddC              Not done
我能够做删除部分,但对于更新查询,它是错误的,它将每个数字都减少到1,并给我类似的输出,这是错误的

tblA

numberx               Address        Status
0                     AddA            New       
1                     AddA            Not Done
0                     AddB            New
0                     AddC            Not done
我希望它是这样的,如果它是0001已经和尚未完成,将重发0001

DELETE FROM  tblA WHERE STATUS = 'Complete';
UPDATE tblA SET numberx  = numberx  - 1;
SELECT * FROM tblA


Desired Output
numberx          Address         Status
0001               AddA           New       
0002               AddA           Not Done
0001               AddB           New
0001               AddC           Not done
使用函数

返回字符串
str
,用字符串
padstr
左填充,长度为
len
个字符。如果
str
长于
len
,则返回值将缩短为
len
个字符



检查正在处理的列的数据类型,如果初始值为0,则后面的值是什么: 更新tblA SET numberx=numberx-1;
这意味着您还必须查看主键和标识规则。

您的删除查询可以删除多行,但在更新中,您只是更新numberx=numberx-1。这可能是一个问题这不是一个好的表结构,因为您的
numberx
值依赖于其他行。您应该去掉
numberx
列,如果需要对结果进行编号,请在查询或应用程序中进行。numberx是自动递增列还是主键?int status允许的事件序列是什么?如果
numberx
是数据类型
int
则它是自动递增的,您不能添加前导零。将其更改为
varchar
并删除自动增量。
UPDATE tblA SET numberx  = LPAD((numberx - 1), 4, 0);