select 表中 随机某行的 某些列 的问题

我是楼主请来的DB 2014-04-03 10:32:38
有某表CT_D_GEO_CITY
要提取某些字段。出现问题的代码如下,有时没有结果,有时2个,3个。
select city_id, PROVINCE_ID, REGION_ID
from (select city_id, city_desc, PROVINCE_ID, REGION_ID,rownum rr
from CT_D_GEO_CITY
)
where rr = ROUND(DBMS_RANDOM.VALUE(1, 106));
要执行后每次只产生一条数据。
请指点代码有什么问题。
...全文
152 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sych888 2014-04-03
  • 打赏
  • 举报
回复
SQL> select * from (select * from emp order by dbms_random.value) t where rownum=1; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7876 ADAMS CLERK 7788 23-5月 -87 1100 20 SQL> select * from (select * from emp order by dbms_random.value) t where rownum=1; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7934 MILLER CLERK 7782 23-1月 -82 100 10
流浪川 2014-04-03
  • 打赏
  • 举报
回复
引用 楼主 u014203816 的回复:
有某表CT_D_GEO_CITY 要提取某些字段。出现问题的代码如下,有时没有结果,有时2个,3个。 select city_id, PROVINCE_ID, REGION_ID from (select city_id, city_desc, PROVINCE_ID, REGION_ID,rownum rr from CT_D_GEO_CITY ) where rr = ROUND(DBMS_RANDOM.VALUE(1, 106)); 要执行后每次只产生一条数据。 请指点代码有什么问题。
想明白了,道理是这样的,问题出在where rr = ROUND(DBMS_RANDOM.VALUE(1, 106))上面 我们正常会以为,是随机产生一个数。。但实际上是为每一行产生一个随机数。。如果随机数恰巧与rr相同的情况下,就会满足条件。如果没有碰到随机数与rr相同则什么都查不出来。。 所以就会出现结果集个数不一致的情况。。
流浪川 2014-04-03
  • 打赏
  • 举报
回复
啊,我试了一下,确实是不确定返回行数。。不光2个3个可能会很多。。
流浪川 2014-04-03
  • 打赏
  • 举报
回复
引用 楼主 u014203816 的回复:
有某表CT_D_GEO_CITY 要提取某些字段。出现问题的代码如下,有时没有结果,有时2个,3个。 select city_id, PROVINCE_ID, REGION_ID from (select city_id, city_desc, PROVINCE_ID, REGION_ID,rownum rr from CT_D_GEO_CITY ) where rr = ROUND(DBMS_RANDOM.VALUE(1, 106)); 要执行后每次只产生一条数据。 请指点代码有什么问题。
查不出来我可以理解,因为你随机出来的值可能超出查询范围。。 但是你用的是=,为什么会出现2个3个的情况捏??
流浪川 2014-04-03
  • 打赏
  • 举报
回复
引用 5 楼 u014203816 的回复:
引用
SQL> select * from (select * from emp order by dbms_random.value) t where rownum=1; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7876 ADAMS CLERK 7788 23-5月 -87 1100 20 SQL> select * from (select * from emp order by dbms_random.value) t where rownum=1; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7934 MILLER CLERK 7782 23-1月 -82 100 10
已得正解: select city_id, PROVINCE_ID, REGION_ID from (select city_id, city_desc, PROVINCE_ID, REGION_ID from CT_D_GEO_CITY order by dbms_random.value ) where rownum=1; 可是order by dbms_random.value 是什么逻辑?
打乱顺序,相当于随机取一行。。
  • 打赏
  • 举报
回复
引用
SQL> select * from (select * from emp order by dbms_random.value) t where rownum=1; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7876 ADAMS CLERK 7788 23-5月 -87 1100 20 SQL> select * from (select * from emp order by dbms_random.value) t where rownum=1; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7934 MILLER CLERK 7782 23-1月 -82 100 10
已得正解: select city_id, PROVINCE_ID, REGION_ID from (select city_id, city_desc, PROVINCE_ID, REGION_ID from CT_D_GEO_CITY order by dbms_random.value ) where rownum=1; 可是order by dbms_random.value 是什么逻辑?

17,140

社区成员

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

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