当前位置: 首页 > 面试题库 >

如何在DELETE语句中使用行的物理位置(ROWID)

从阎宝
2023-03-14
问题内容

我有一个表,其中有很多重复的行,而且没有主键。
我只想删除重复的记录,但是当我尝试这样做时,它将删除所有对等记录。

如何ROWID从Postgres的表格中找到?


问题答案:

在PostgreSQL上,该行的物理位置称为CTID。

因此,如果要查看它,请使用类似QUERY的查询:

SELECT CTID FROM table_name

要在DELETE语句上使用它来删除重复的记录,请像下面这样使用它:

DELETE FROM table_name WHERE CTID NOT IN (
  SELECT RECID FROM 
    (SELECT MIN(CTID) AS RECID, other_columns 
      FROM table_name GROUP BY other_columns) 
  a);

请记住,table_name是所需的表,other_columns是要用于过滤该表的列。

IE:

DELETE FROM user_department WHERE CTID NOT IN (
  SELECT RECID FROM 
    (SELECT MIN(CTID) AS RECID, ud.user_id, ud.department_id
      FROM user_department ud GROUP BY ud.user_id, ud.department_id) 
  a);


 类似资料:
  • 数据库:Sybase Advantage 11 在我对数据进行规范化的过程中,我试图删除从以下语句中得到的结果:

  • 问题内容: 我有一个争论,我这样说道: 但它似乎不起作用。 我是sqlite的新手,请告诉我如何解决它。谢谢 ! 问题答案: 将通配符应用于参数,而不是SQL: 在SQL参数插值增加了报价给你,所以你的查询结束的,这不是有效的SQL。

  • 问题内容: 我正在尝试运行此代码并删除MySQL数据库中的某些记录,但出现此错误: 这是我目前拥有的代码: 我能够运行select *查询没有问题,但是当我尝试运行DELETE查询时,它并没有解决。我已经在MySQL工作台中运行了此命令,并且该命令有效,但是当我使用Java时,该命令不起作用。 问题答案: 您使用它代替。 仅用于返回数据的语句。适用于不会返回日期的日期(更新,插入,删除,我相信诸如

  • 问题内容: 在C语言中,我可以编写一个if语句 但是,当我尝试在Java中执行相同操作时,编译器会告诉我“不兼容的类型”,并说我需要一个而不是一个。有什么方法可以用Java编写C代码吗? 问题答案: 以下任何一项都可以为您工作:

  • 主要内容:删除单个记录,删除多个记录,删除所有记录SQL DELETE语句用于从表中删除行。 通常,语句从表中删除一个或多个记录。 语法 假设有一张: 的结构和行记录得到以下结果: EMP_ID EMP_NAME CITY SALARY AGE 1 Angelina Chicago 200000 30 2 Robert Austin 300000 26 3 Christian Denver 100000 42 4 Kristen Washingt

  • 主要内容:语法,实例SQLite 的 DELETE 查询用于删除表中已有的记录。可以使用带有 WHERE 子句的 DELETE 查询来删除选定行,否则所有的记录都会被删除。 语法 带有 WHERE 子句的 DELETE 查询的基本语法如下: 您可以使用 AND 或 OR 运算符来结合 N 个数量的条件。 实例 假设 COMPANY 表有以下记录: 下面是一个实例,它会删除 ID 为 7 的客户: 现在,COMPANY