如何从3个不同的表中共同选择100行?

Ahm*_*mad 6 sql oracle

我有3个包含相似数据行的表.我需要从以下三个表中选择100行,条件如下:

从表A中选择不超过25行 - >(将其命名为count_a)

从表B中可以选择不超过40行 - >(count_b)

可以从表C(count_c)中选择任意数量的行,但数字应为count_c = 100 - (count_a + count_b)

在一个行集合中组合3个表

这是我尝试过的:

SELECT * FROM
(
    SELECT * FROM TABLE_A WHERE ROWNUM <= 25
    UNION ALL 
    SELECT * FROM TABLE_B WHERE ROWNUM <= 40
    UNION ALL
    SELECT * FROM TABLE_C 
) WHERE ROWNUM <=100
Run Code Online (Sandbox Code Playgroud)

但查询太​​慢,并不总是给我100行.

val*_*lex 2

尝试添加WHERE ROWNUM <= 100到最后一个选择:

SELECT * FROM
(
    SELECT TABLE_A.*, 1 as OrdRow FROM TABLE_A WHERE ROWNUM <= 25
    UNION ALL 
    SELECT TABLE_B.*, 2 as OrdRow FROM TABLE_B WHERE ROWNUM <= 40
    UNION ALL
    SELECT TABLE_C.*, 3 as OrdRow  FROM TABLE_C WHERE ROWNUM <= 100
) WHERE ROWNUM <=100
  ORDER BY OrdRow;
Run Code Online (Sandbox Code Playgroud)

您也可以尝试:

SELECT * FROM TABLE_A WHERE ROWNUM <= 25
UNION ALL 
SELECT * FROM TABLE_B WHERE ROWNUM <= 40
UNION ALL
SELECT * FROM TABLE_C WHERE ROWNUM <= 
       100
       -
       (select count(*) TABLE_A WHERE ROWNUM <= 25)
       -
       (select count(*) TABLE_B WHERE ROWNUM <= 40)
Run Code Online (Sandbox Code Playgroud)