我在尝试为客户(网络交易)做一些业务逻辑时遇到了一些问题:
我的客户有一张像这样的表(简化):
|| ID || OFFERED_PRODUCT_ID || DEMANDED_PRODUCT_ID ||
|| 01 || 34 || 45 ||
|| 01 || 34 || 16 ||
|| 01 || 45 || 57 ||
|| 01 || 47 || 57 ||
|| 01 || 57 || 63 ||
|| 01 || 16 || 20 ||
现在,应用程序必须显示最大的贸易链,贸易链被定义为提供和需求产品之间的关系。
这是贸易链:
<34、45、57、63> <34、16、20> <45、57、63> <47、57、63> <57、63> <16、20>
我尝试使用 C# 来解决这个问题,但考虑到数据量,它变得不可能。我的一位同事建议我使用递归。我试图理解他的意思,但我是一名客户端开发人员,对 SQL 知之甚少。
我做了这些:
select o.OFFERED_PRODUCT_ID, o.DEMANDED_PRODUCT_ID
from TRADES o
start with
o.DEMANDED_PRODUCT_ID = (SELECT MIN(o.DEMANDED_PRODUCT_ID) from TRADES)
connect by NOCYCLE prior o.DEMANDED_PRODUCT_ID = o.OFFERED_PRODUCT_ID;
我正在尝试使用系统上最旧的产品(使用最小标识符)开始递归。但它不起作用。它给了我所有的贸易链。我只需要最大的一个。
这是一个输出示例:
OFFERED_PRODUCT_ID DEMANDED_PRODUCT_ID
9920896475501851 59587794888502550724
59587794888502550724 13197303523502765990
13197303523502765990 54010274740204405159
54010274740204405159 14505831337880766413
14505831337880766413 89607128670993987443
89607128670993987443 8802863939059413452
8802863939059413452 7779127922701247342
7779127922701247342 3810800421539873909
3810800421539873909 12423373218147473557