关于查询重复记录的问题?

oyxiaoyu0 2004-08-17 01:30:04
DELETE
FROM table_name a
WHERE rowid > ( SELECT min(rowid)
FROM table_name b
WHERE b.pk_column_1 = a.pk_column_1
and b.pk_column_2 = a.pk_column_2)


上面的SQL语句操作的不都是一个表table_name吗?为什么还要在子查询中连接呢?
直接把SQL语句的后2行去掉可以吗?
...全文
239 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyxiaoyu0 2004-08-18
  • 打赏
  • 举报
回复
明白了,不是连接。

实际上就是等于
结贴
liuyi8903 2004-08-17
  • 打赏
  • 举报
回复
呵呵:)
sijian2001 2004-08-17
  • 打赏
  • 举报
回复
苯,回去再翻翻數據庫的書
LovenDreams 2004-08-17
  • 打赏
  • 举报
回复
“让表自身再互相等一回”就是为了查询出重复的记录啊。
LovenDreams 2004-08-17
  • 打赏
  • 举报
回复
如果把SQL语句的后2行去掉,则变成
DELETE
FROM table_name a
WHERE rowid > ( SELECT min(rowid)
FROM table_name b )

这样的后果将只保留MIN(ROWID)的记录,其它的全都删除掉了。


oyxiaoyu0 2004-08-17
  • 打赏
  • 举报
回复
楼上的
SELECT min(rowid)
FROM table_name b 这样的子查询怎么会得到第一条记录呢~~~~
yujiabian 2004-08-17
  • 打赏
  • 举报
回复
比如说现在表中有10条记录,主查询准备删除第5条,如果第2、6、9条和该记录重复,如果不使用本身连接,那么你的字查询得到的就是第一条记录,根本就不是你想删除的
oyxiaoyu0 2004-08-17
  • 打赏
  • 举报
回复
我知道后面括号里的是子查询,可就是不太明白为什么还有让表自身再互相等一回呢~~
wylwyl1130 2004-08-17
  • 打赏
  • 举报
回复
当然不可以,后面的是子查询
hot.wind 2004-08-17
  • 打赏
  • 举报
回复
这是查找或者删除表中重复记录的标准用法,是属于oracle中delete命令的市里代码。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧