在 Oracle 中获取随机列值
Fetching random column value in Oracle
假设我有一个 table product_details,其中包含 10 个不同的产品。第一列是 product_ID,它是主键。
现在我想将 90 个随机条目插入到 order_details 中,其中有一列 product_ID 引用 product_details.product_ID
我如何从 oracle 中其他 table 的给定 10 个条目中生成 100 个随机条目。
请告诉我SQL查询这个问题(不是程序)。
如果您只有 10 行,那么只执行 cross join
、按 dbms_random.value
排序并过滤到前 90 行(作为插入的一部分)应该不会有任何性能问题声明):
insert into order_details
select *
from(
select p1.*
from product_details p1
cross join product_details p2
order by dbms_random.value
) where rownum <= 90;
Fiddle 演示: http://sqlfiddle.com/#!4/d390c/1/0
我假设您除了 product_id
之外还有其他列,因此请相应地进行修改。
如果 table 远大于 10 行,而您仍然只想要随机 90 行,则可以使用 sample()
将其减少到略高于您的 90 行目标,然后order by dbms_random.value
afterward, where rownum <= 90. 这样做会在数据集越大的情况下有更大的性能改进。如果有 10 行,则可以忽略不计。全叉积只有100行。
假设我有一个 table product_details,其中包含 10 个不同的产品。第一列是 product_ID,它是主键。
现在我想将 90 个随机条目插入到 order_details 中,其中有一列 product_ID 引用 product_details.product_ID
我如何从 oracle 中其他 table 的给定 10 个条目中生成 100 个随机条目。
请告诉我SQL查询这个问题(不是程序)。
如果您只有 10 行,那么只执行 cross join
、按 dbms_random.value
排序并过滤到前 90 行(作为插入的一部分)应该不会有任何性能问题声明):
insert into order_details
select *
from(
select p1.*
from product_details p1
cross join product_details p2
order by dbms_random.value
) where rownum <= 90;
Fiddle 演示: http://sqlfiddle.com/#!4/d390c/1/0
我假设您除了 product_id
之外还有其他列,因此请相应地进行修改。
如果 table 远大于 10 行,而您仍然只想要随机 90 行,则可以使用 sample()
将其减少到略高于您的 90 行目标,然后order by dbms_random.value
afterward, where rownum <= 90. 这样做会在数据集越大的情况下有更大的性能改进。如果有 10 行,则可以忽略不计。全叉积只有100行。