【发布时间】:2016-02-20 00:54:23
【问题描述】:
我的目标很简单,只要部门位于某个特定部门(例如 2),我就必须从员工表中创建一个包含一些随机值的临时表。对于其他部门我不关心值,它可以是NULL。
目前我有以下:
create table test
as
select s.DEPTNAME,
cast (
(case when s.DEPTID in (2) then
(SELECT a.ENAME FROM
(SELECT b.ENAME, b.DEPTID FROM EMPLOYEE b
WHERE b.DEPTID IS NOT NULL
ORDER BY DBMS_RANDOM.VALUE) a
WHERE a.DEPTID = s.DEPTID AND ROWNUM = 1
)
END)
AS VARCHAR2(30)) "ENAME" from DEPARTMENT s;
但这里的主要问题与性能有关。对于 2 中的每个部门值,我们执行一种 EMPLOYEE 表来获取单个随机 ENAME。 有一个更好的方法吗 ?我知道样本可能有效,但我想获得更多的随机性。
【问题讨论】:
-
您为什么将
CASTENAME 作为数字?这不应该是某种员工姓名吗? -
对不起,你是对的,它的 CAST AS VARCHAR2(30)
-
您的查询可能会多次返回同一员工。这是故意的吗?还是您宁愿每个员工最多一次?
-
员工姓名重复是可以的。但它必须是随机的。
标签: oracle performance join random sample