gpt4 book ai didi

sql - 处理递归(oracle)

转载 作者:行者123 更新时间:2023-12-01 10:11:01 24 4
gpt4 key购买 nike

我在尝试为客户(网络交易)执行一些业务逻辑时遇到了一些问题:

我的客户有一张像这样的表格(简化版):

|| 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

最佳答案

我相信你想要类似的东西

SQL> ed
Wrote file afiedt.buf

1 with trades as (
2 select 34 offered_product_id, 45 demanded_product_id from dual
3 union all
4 select 34, 16 from dual
5 union all
6 select 45, 57 from dual
7 union all
8 select 47, 57 from dual
9 union all
10 select 57, 63 from dual
11 union all
12 select 16, 20 from dual
13 )
14 select path
15 from (
16 select offered_product_id,
17 demanded_product_id,
18 level + 1,
19 sys_connect_by_path( offered_product_id, '/' ) ||
20 '/' || demanded_product_id path,
21 dense_rank() over (order by level desc) rnk
22 from trades
23 connect by prior demanded_product_id = offered_product_id )
24* where rnk = 1
SQL> /

PATH
--------------------
/34/45/57/63

关于sql - 处理递归(oracle),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5022581/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com