【发布时间】:2020-01-20 06:19:54
【问题描述】:
我有 3 张桌子:order、order_transaction 和 order_history。
在order 中,仅保存一个订单条目以及order_id。
在order_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';
【问题讨论】:
-
您应该更喜欢 ANSI 连接语法,而不是旧的 Oracle 连接语法。它甚至在古代 Oracle 10g 中就已经可用
-
@Wernfried Domscheit 我也试过 JOIN 和 LEFT JOIN。
-
@Suyash:您没有显示表“订单”的示例数据,您可以添加它吗?另外,根据您的示例数据,您能否显示您期望的输出?
-
@Suyash 提供预期的报告输出,以及 ord 表中将有多少条目。您提供的查询将给出重复记录,因为 order_history 和 order_transaction 中有多个条目。
-
您的示例数据与您的表结构不匹配(
order_transaction在示例数据中有created_date但不在列列表中,并且没有qty、price或@987654347 @ 在您的示例数据中)并且都不匹配您的查询(ord.tradedate不存在并且orderhist.event缺少s)。请edit您的问题,为您的表提供有效的 DDL 语句,为您的示例数据提供 DML 语句以及将针对它们运行的 SQL 查询给我们一个minimal reproducible example(并包括您的预期输出)。