首页 文章

如果我尝试使用Oracle中的SAMPLE子句选择随机行,则会发生ORA-01446

提问于
浏览
4

由于表中的行数太大,我从“ORDER BY dbms_random.value”结构切换为获取1000个随机行到SAMPLE子句 . 只需不到一秒钟而不是3分钟即可完成 . 但在某些表格上我得到了这个错误

ORA-01446:无法从DISTINCT,GROUP BY等视图中选择ROWID

我的查询如下所示:

SELECT t1.columnA FROM 
(SELECT columnA FROM table1 sample(1) where rownum <= 1000)  t1 
JOIN table2 t2 
ON (t1.columnA = t2.columnA) 
WHERE t2.columnB IS NOT NULL

它在某些表上工作正常,但在其他表上失败 . 我放弃谷歌搜索,请你在我的情况下建议任何解决方法 .

1 回答

  • 3

    正如我所期望的那样,SAMPLE子句的工作速度比所有其他解决方案更快(Here you can see some of them

    因为我一般都是Oracle DB的新手,而Oracle SQL Developer特别是我错误地称为查看“表” . 在我发现解决方案清楚之后 .

    解决方案:我必须查看构成视图的SQL查询,并用该查询替换视图名称 . 例如,我的table1实际上是一个视图,其名称我替换为构成该视图的SELECT查询:

    SELECT t1.columnA FROM 
    (SELECT columnA FROM (select distinct tt1.columnA,  tt2.columnC
      from table22 tt2, table11 tt1
     where tt2.columnC = tt1.columnA) sample(1) where rownum <= 1000)  t1 
    JOIN table2 t2 
    ON (t1.columnA = t2.columnA) 
    WHERE t2.columnB IS NOT NULL
    

    之后我可以使用表格并将SAMPLE应用于它们!谢谢大家,很棒的网站! =)PS:对不起我的英文和丑陋的代码facepalm.jpg

相关问题