Gan*_* SR 2 postgresql delete-row sql-delete
我是 postgreSql 的新手,我使用以下查询从数据库中检索所有字段。
SELECT student.*,row_number() OVER () as rnum FROM student;
Run Code Online (Sandbox Code Playgroud)
我不知道如何逐行删除特定行号。请给我一些想法。
这是我的桌子:
专栏 | 类型 ----------+------------------ 名称 | 文本 滚号 | 整数 平均绩点 | 双精度 部门 | 文本 分公司 | 文本
with a as
(
SELECT student.*,row_number() OVER () as rnum FROM student
)
delete from student where ctid in (select ctid from a where rnum =1) -- the
-- row_number you want
-- to delete
Run Code Online (Sandbox Code Playgroud)
ctid :
行版本在其表中的物理位置。请注意,虽然 ctid 可用于非常快速地定位行版本,但每次通过 VACUUM FULL 更新或移动行时,行的 ctid 都会发生变化。因此 ctid 作为长期行标识符是没有用的。应使用 OID(或者更好的是用户定义的序列号)来标识逻辑行。
注意:我强烈建议您使用学生unique档案。
按照克雷格的评论,我将提供另一种方法来解决OP的问题,这有点棘手
首先为表创建一个唯一列,用于以下查询 student
alter table student add column stu_uniq serial
Run Code Online (Sandbox Code Playgroud)
这将为stu_uniq每一行生成相应的唯一值,以便 OP 可以轻松地使用它的DELETE任何行stu_uniq
| 归档时间: |
|
| 查看次数: |
13644 次 |
| 最近记录: |