gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 02:28:24 26 4
gpt4 key购买 nike

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

ORA-01446: cannot select ROWID from view with DISTINCT, GROUP BY, etc



我的查询如下所示:
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

它在某些表上工作正常,但在其他表上失败。我放弃了谷歌搜索,你能否就我的情况提出任何解决方法。

最佳答案

正如我所期望的,SAMPLE 子句的运行速度比所有其他解决方案都要快 ( Here you can see some of them )

因为我通常不熟悉 Oracle DB,尤其是 Oracle SQL Developer,所以我错误地将 View 称为“表”。在我发现之后,解决方案就很清楚了。

解决方案:我必须查看形成 View 的 SQL 查询并用该查询替换 View 名称。
例如,我的 table1 实际上是一个 View ,我将其名称替换为形成该 View 的 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

关于sql - 如果我尝试在 Oracle 中使用 SAMPLE 子句选择随机行,则会发生 ORA-01446,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14628410/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com