Получение дубликатов записей в Oracle - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть 3 таблицы: order, order_transaction и order_history.

В order сохраняется только одна запись заказа вместе с order_idorder_history я сохраняю все транзакции, происходящие в этом заказе, как orderAccepted, orderInProgress (это события в этом заказе).В order_transaction сохраняются все детали транзакции.transaction_id в обеих таблицах, т. Е. order_transaction и order_history, остаются неизменными.

content of tables are 
order
    id
    created by
    created_date
    client type
    type 
    qty 
    price

order_history
    id
    order_id
    transaction_id
    events
    created_date

order_transaction
    id
    order_id
    transaction_id
    qty
    price
    status

Существует событие, при котором у клиента может быть выполнен возврат заказа, называемого orderProccessedReverted, но это не выполняется за один раз.Например, если был порядок 1000 кол-во, а затем он был отменен, он будет разбит на 10 разных записей, где order_id останется неизменным, но транзакция изменится, и эта запись будет присутствовать как в order_transaction, так и order_historyтаблицы.

Примером записей в обеих таблицах будет:

order_history
id  order_id  transaction_id  events                        created_date  
001  1111       345           orderProccessedReverted       20-08-19
002  1111       346           orderProccessedReverted       20-08-19
003  1111       347           orderProccessedReverted       20-08-19


order_transaction
id  order_id  transaction_id    qty     created_date  
011  1111       345             100      20-08-19
012  1111       346             100      20-08-19
013  1111       347             100      20-08-19

Теперь я создаю отчет, в котором мне нужны все заказы, которые были отменены.Ниже приведены столбцы отчетов:

order_id   created_by   client_type  transaction_id   qty    status          events                     created_date
111         user1           type1       444           100    reverted       orderProccessedReverted         20-08-19
111         user1           type1       445           100    reverted       orderProccessedReverted         20-08-19
111         user1           type1       446           100    reverted       orderProccessedReverted         20-08-19
111         user1           type1       447           100    reverted       orderProccessedReverted         20-08-19
112         user2           type2       551           50     reverted       orderProccessedReverted         20-08-19
112         user2           type2       552           50     reverted       orderProccessedReverted         20-08-19
112         user2           type2       553           50     reverted       orderProccessedReverted         20-08-19

Я пытался выполнить левое соединение и обычные объединения, но получил повторяющиеся записи.

Я пытался выполнить следующий запрос:

select * from
order_history orderHist,
order_transaction  tr,
order ord
where
ord.id = tr.order_id
AND  tr.order_id = orderhist.order_id
AND tr.transaction_id = orderhist.transaction_id 
AND orderhist.event= 'orderProccessedReverted'
AND tr.status = 'REVERTED'
AND ord.tradedate='20190820';

1 Ответ

0 голосов
/ 19 сентября 2019

попробуйте это, я создал с фиктивными данными и несколькими столбцами, вы можете добавить больше столбца в select.

WITH ord AS ( SELECT '001' AS id,
       '111' AS order_id
FROM dual ), ord_his AS ( ( SELECT '001' AS id,
       '111' AS order_id,
       '456' AS transaction_id,
       'Reverted' AS events
FROM dual
) UNION ( SELECT '002' AS id,
       '111' AS order_id,
       '457' AS transaction_id,
       'Reverted' AS events
FROM dual
) ), ord_tran AS ( ( SELECT '001' AS id,
       '111' AS order_id,
       '456' AS transaction_id,
       100 AS qnty
FROM dual
) UNION ( SELECT '002' AS id,
       '111' AS order_id,
       '457' AS transaction_id,
       100 AS qnty
FROM dual
) ) SELECT ord.*,
       ord_his.transaction_id,
       events,
       qnty
FROM ord,
     ord_his,
     ord_tran
WHERE ord.order_id = ord_his.order_id AND ord_his.transaction_id = ord_tran.transaction_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...