如何解决如何按行号顺序删除Mysql表中的特定行?
这里正在使用角度的内容库,其中删除功能调用API将从存储文件路径的DB中删除索引为(i)的图像文件。但是问题是数据库具有自动递增的ID并声明为主键的ID。 如何通过使用索引i = 4删除ID为17的行的特定行?
MysqL> select * from ezign.t_content_library;
+----+---------------------------------------------+-------------------------------------------------------------+---------------+
| id | content_name | content_path | created_time |
+----+---------------------------------------------+-------------------------------------------------------------+---------------+
| 14 | gayathri-sri-ptbKY_b1ROc-unsplash.jpg | /assets/content/gayathri-sri-ptbKY_b1ROc-unsplash.jpg | 1597082730561 |
| 15 | nathan-anderson-UhagOo7IOyc-unsplash.jpg | /assets/content/nathan-anderson-UhagOo7IOyc-unsplash.jpg | 1597131503584 |
| 16 | melnychuk-nataliya-8J6uuvsdj-4-unsplash.jpg | /assets/content/melnychuk-nataliya-8J6uuvsdj-4-unsplash.jpg | 1597141241146 |
| 17 | jo-jo-mPM-x0zPhok-unsplash.jpg | /assets/content/jo-jo-mPM-x0zPhok-unsplash.jpg | 1597141406728 |
+----+---------------------------------------------+-------------------------------------------------------------+---------------+
是否有类似的代码 从t_content_library的位置删除................. ??
解决方法
您可以使用row_number()
和join
:
delete cl
from ezign.t_content_library cl join
(select cl.*,row_number() over (order by id) as seqnum
from ezign.t_content_library cl
) cl2
on cl2.id = cl.id
where cl2.seqnum = 4;
或更有效地:
delete cl
from ezign.t_content_library cl join
(select cl.*
from ezign.t_content_library cl
order by id
limit 1 offset 3 -- 3 = 4 - 1
) cl2
on cl2.id = cl.id;
不幸的是,DELETE
允许LIMIT
但不允许OFFSET
,因此我认为JOIN
是必要的。
您可以通过此查询获取要删除的id
:
select id
from t_content_library
order by id limit 3,1
3
后面的数字LIMIT
表示将跳过3行,数字1
表示将返回3个跳过的行之后的1行,因此{{1}第四行的}。
您可以在id
语句中使用上述查询,如下所示:
DELETE
请参见demo。
结果:
delete
from t_content_library
where id = (select id from (select id from t_content_library order by id limit 3,1) t);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。