2013-04-18 38 views
0

我試着寫在Oracle 11g中的SQL語句會隨機從兩個不同的表與同列工會選擇5000條記錄:的Oracle 11g:聯盟所有DBMS_RANDOM

select * 
    from (
     select ename, job 
     from emp1 
     union all 
     select ename, job 
     from emp2 
     order by dbms_random.value() 
     ) 
where rownum <= 5000 

而當它運行,我得到錯誤ORA-01785:ORDER BY項必須是一個SELECT列表表達式的編號。 當我刪除第二個表時,它工作得很好。但是,現在我需要從兩個表中隨機選擇,首先將它們合併,隨機排列,然後選擇5000個。

或者也許有一些其他的方法具有相同的結果?

Tnx尋求幫助。

+0

嗨約翰尼,是多麼重要的數字5000 ?如果它大約有5000條記錄會好嗎? –

+0

它不是重要的......你的意思是使用示例函數嗎? –

回答

2

你的ORDER BY只適用於UNION的第二部分ALL - 你必須所有的第一執行UNION然後應用ORDER BY:

select * 
    from (
    select * from (
     select ename, job 
     from emp1 
     union all 
     select ename, job 
     from emp2 
    ) 
    order by dbms_random.value() 
) 
where rownum <= 5000