关于PostgreSQL里的一条SQL语句意思

dreamers 发布于 2013/03/03 17:22
阅读 376
收藏 0
delete from test_name a 
where a.ctid <>
(
select max(b.ctid) from test_name b 
where a.id = b.id  

);

请问哪个 DBA可以解释一下这条SQL的意思 。。(DB是:PostgreSQL)

加载中
0
kenyon_君羊
kenyon_君羊
回复 @yangzhiyong : CTID是表的一个隐藏字段,是每行数据在该表中的一个物理标识符,和oracle的rowid比较类似,通常数据量不大的时候也可以看成唯一。你这条SQL是要去掉表里的一些重复数据(CTID值不一样,猜测你这表里没有主键),所以以CTID为参考删除重复数据,并保留其中一条。可参考
http://my.oschina.net/Kenyon/blog/63668;
http://my.oschina.net/Kenyon/blog/64017;
0
陈顶顶顶顶
陈顶顶顶顶
就是把id相同的数据, ctid最大的保留,其它的全删掉
0
StormFour
StormFour
删除重复记录吧。
0
kenyon_君羊
kenyon_君羊
删除重复数据,保留其中一条。建议还是选择主键去做比较稳妥。
dreamers
dreamers
能不能详细解释一下该条SQL的意思?
返回顶部
顶部