Как объединить 100 случайных строк из таблицы 1 несколько других таблиц в оракуле - PullRequest
0 голосов
/ 10 мая 2018

Я отбросил свой предыдущий вопрос, так как не смог хорошо объяснить.Может быть, это будет проще.

У меня следующий запрос.

Select * from comp_eval_hdr, comp_eval_pi_xref, core_pi, comp_eval_dtl
where comp_eval_hdr.START_DATE between TO_DATE('01-JAN-16' , 'DD-MON-YY') 
and TO_DATE('12-DEC-17' , 'DD-MON-YY')
and comp_eval_hdr.COMP_EVAL_ID = comp_eval_dtl.COMP_EVAL_ID
and comp_eval_hdr.COMP_EVAL_ID = comp_eval_pi_xref.COMP_EVAL_ID
and core_pi.PI_ID = comp_eval_pi_xref.PI_ID
and core_pi.PROGRAM_CODE = 'PS'

Теперь, если я хочу, чтобы только 100 случайных строк из таблицы comp_eval_hdr соединились с другими таблицами, как бы я поступилоб этом?Если это облегчает, вы можете игнорировать таблицу comp_eval_dtl.

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

Трудно понять, что вы хотите с вопросом, как написано, но вот моя попытка.

WITH rand_list AS
   (SELECT * FROM comp_eval_hdr
    WHERE  comp_eval_hdr.START_DATE BEWTWEEN TO_DATE('01-JAN-16' , 'DD-MON-YY') AND TO_DATE('12-DEC-17' , 'DD-MON-YY') 
    ORDER BY DBMS_RANDOM.VALUE)
     first_100 AS
    (SELECT *
     FROM   rand_list    
     WHERE ROWNUM <=100)
SELECT md.col_1, t3.col_a
  FROM first_100 md     
       INNER JOIN
       table2 t2 ON md.id_column = t2.fk_comp_eval_hdr_id
       INNER JOIN
       table3 t3 ON t3.id_column = t2.fk_table3_id 

Вы не дали никаких указаний на то, как они объединяются, или на имена таблиц, и, очевидно, я не проверял это ни на каких фиктивных таблицах. У вас есть список рандомизированных записей с RAND_LIST, который вы можете, если хотите, объединить с запросом FIRST_100 (на ваш выбор). Затем основной запрос просто присоединяет его через таблицу сопоставления (T2) к таблице «кратных» (T3).

0 голосов
/ 10 мая 2018

как выглядит таблица 2? ... Позвольте мне привести один пример в виде таблицы персонажа и таблицы заказов?

выберите * из ( выберите * от лица ps, порядок заказов, где ps.city = 'mumbai' и ps.id = order.purchasedby) porder, где porder.rownum <= 100 </p>

Я не проверял, но это будет выглядеть примерно так.

0 голосов
/ 10 мая 2018

Я думаю, что вы в значительной степени там.Вам просто нужны подзапросы, псевдонимы таблиц и условия JOIN:

SELECT . . .
FROM (SELECT a.*
      FROM (SELECT a.*
            FROM a
            WHERE a.START_DATE BEWTWEEN DATE '2016-01-01' AND DATE '2017-12-12' 
            ORDER BY DBMS_RANDOM.VALUE
           ) a
      WHERE ROWNUM <= 100
     ) a JOIN
     mapping m
     ON a.? = m.? JOIN
     b
     ON m.? = b.?;

? - это просто заполнитель для столбцов соединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...