我现在假设有张表是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!因此就有了
所以我认为是第二种
但是我不知道对不对请高手指点谢谢!
建表的时候没有设主键
然后不小心插数据的时候插入了一组重复数据
表如下
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!因此就有了
所以我认为是第二种
但是我不知道对不对请高手指点谢谢!
解决方案 »
- 关于SQL数据的问题
- 跪求sql
- ORACLE 9I job运行的问题
- 高分解决Oracle中sql语句问题
- 关于数据插入方法的疑问
- c#怎么执行orcle数据库中的copy(copy命令在SQL Plus可以运行)
- 禁止特定客户端用SYSTEM用户登录数据库
- 关于toad的问题,请大家帮助!
- 请问:hibernate.cfg.xml文件中连接oracle的驱动是什么?
- 求解:返回不固定的字段的记录集,以及游标如何解决不能在两个服务器之间传递的限制???
- 这样的情况下,数据存到数据库里,怎么样比较快?
- 我的表空间中有个dblink,每次导入时,就出现连接的视图无法编译,能不能忽略错误,让对象建立完毕呢?
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.rowid in (select max(b.rowid) from t1 b where a.id = b.id);