oracle高手请帮忙一下

f05011221 2009-03-12 04:20:49
我现在假设有张表是t1
建表的时候没有设主键
然后不小心插数据的时候插入了一组重复数据
表如下
id name
1 a
2 b
3 c
1 a
2 b
3 c
接下来我使用了一个select嵌套语句
select a.id from t1 a where a.id in (select max(b.rowid) from t1 b where a.id = b.id);
注:就算没有设主码但是每一行都有一个不重复的rowid
假设按次序下来rowid分别为
AA
AB
AC
AD
AE
AF
select a.id from t1 a where a.id in (select max(b.rowid) from t1 b where a.id = b.id);这个语句类似等价于
select a.id from t1 a where a.id in (AD,AE,AF)
还是select a.id from t1 a where a.id in (AD,AE,AF,AD,AE,AF)

我觉得是第二种,以下是我个看法
首先读t1 a的第一行
t1 a: t1 b:
id name id name
1 a 1 a
2 b
3 c
1 a
2 b
3 c
然后在这种情况下max(b.rowid)
这时也就选出了t1 b的第4行的rowid
因为在第一次是满足a.id(a表的第一行的id)=b.id只有第一行和第四行
然后明显这时max(rowid)是第四行那个
也就是AE
同理t1 a第二行是
id name id name
1 a
2 b 2 b
3 c
1 a
2 b
3 c
这时就是AF
同理t1 a第三行是
id name id name
1 a
2 b
3 c 3 c
1 a
2 b
3 c
这时就是AG
关键第四行t1 a
id name id name
1 a
2 b
3 c
1 a 1 a
2 b
3 c
这时又变成了就是AD!因此就有了
所以我认为是第二种
但是我不知道对不对请高手指点谢谢!




...全文
100 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
declare64 2009-03-17
  • 打赏
  • 举报
回复
是想找出重复行吗?
lwmonster 2009-03-12
  • 打赏
  • 举报
回复
没理解你说的到底是什么意思
f05011221 2009-03-12
  • 打赏
  • 举报
回复
写太快了写错了应该是
select a.id from t1 a where a.rowid in (select max(b.rowid) from t1 b where a.id = b.id);
lwmonster 2009-03-12
  • 打赏
  • 举报
回复
为什么不自己试过再来??
select a.id from t1 a where a.id in (select max(b.rowid) from t1 b where a.id = b.id);
这句话要是能执行我就服你了

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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