【发布时间】:2012-07-22 22:38:11
【问题描述】:
我有三个查询,我希望由这些查询的条目组成的结果行随机连接在一起。
我不想合并结果,而是以或多或少随机的方式加入它们(可以保留原始分布,也可以在所有结果中统一)。
我尝试了以下方法:
select *
from
(
SELECT street, number
FROM Addresses
WHERE valid = '1'
order by Dbms_Random.Value
) q1 ,
(
select prename
from person
order by Dbms_Random.Value
) q2 ,
(
select surname
from person
order by Dbms_Random.Value
) q3
我的结果集看起来一点也不随机:
Main street, 1, Andre, Smith
Main street, 1, Andre, Warnes
Main street, 1, Andre, Jackson
Main street, 1, Andre, Macallister
从查询中删除 ORDER BY 并将其应用于笛卡尔积的结果效率极低,因为表很大,尤其是它们的笛卡尔积。
【问题讨论】:
-
当前您正在检索笛卡尔积。那是你要的吗?就像,如果每个表有 10 行,那么您是否希望您的结果集包含所有 1000 个连接行,只是以随机顺序排列?还是只需要 10 行?
-
您要查找多少个值?每张桌子有多大?
-
感谢您的回答。结果的总数不应该是笛卡尔积的大小,而是可以介于最小表的大小和所涉及的最大表的大小之间。一个表中的行出现多次是可以的。