删除sql中表中的重复行

时间:2014-02-07 23:00:01

标签: sql oracle

oracle 11g

中对此结果的查询是什么

我有一个表调用者product_table.in我的product_table我没有主键,我有这些记录

pid  pname   pprice
===  =====   ======
101   aaa      343
101   aaa      343
101   aaa      343
101   aaa      343

我想要一个查询,它将删除除一条记录之外的所有重复值

表示执行该查询后我需要此结果

pid  pname   pprice
===  =====   ======
101   aaa      343

可以使用sql查询或子查询而不使用任何函数或过程逻辑吗?

提前致谢

2 个答案:

答案 0 :(得分:2)

在Oracle中,您可以使用rowid和子查询来执行此操作:

delete from product_table
    where rowid not in (select min(rowid)
                        from product_table
                        group by pid, pname, pprice
                       );

答案 1 :(得分:0)

先生,戈登·林诺夫的答案是正确的,但这也可以通过自我加入

来实现
delete from product_table p1
  where rowid not in
  (select max(rowid) from product_table p2
  where p1.pid = p2.pid );