o******n 发帖数: 511 | 1 我有一个表,其中一部分长这样:
id^company1^company2
1^a^b
2^a^c
3^b^c
4^a^d
5^c^d
6^b^e
7^d^e
8^e^d
9^f^a
我想把company2 == company1的连起来形成chain,比如把第1,3,5,7行连起来形成a
-b-c-d-e的链。
不能是1,3,5,8,company1和company2顺序不能反。
只要最长的chain,比如要a-b-c-d-e,不需要c-d-e。
还有个问题是不知道到底要连多少次,a-b-c-d-e后面可能还有,可能最后是a-b-c-d-e
-f-g。
请问这个能用sql做吗?谢谢。 |
e****7 发帖数: 4387 | 2 粗看可以,数据是否会产生循环?
【在 o******n 的大作中提到】 : 我有一个表,其中一部分长这样: : id^company1^company2 : 1^a^b : 2^a^c : 3^b^c : 4^a^d : 5^c^d : 6^b^e : 7^d^e : 8^e^d
|
s**********o 发帖数: 14359 | 3 你这不是SQL的问题,这种PATH的问题都是算法问题
【在 o******n 的大作中提到】 : 我有一个表,其中一部分长这样: : id^company1^company2 : 1^a^b : 2^a^c : 3^b^c : 4^a^d : 5^c^d : 6^b^e : 7^d^e : 8^e^d
|
s**********o 发帖数: 14359 | 4 当然是会有的,比如a->b->a->b->a-b无线循环下去,没有最长,只有更长
【在 e****7 的大作中提到】 : 粗看可以,数据是否会产生循环?
|
o******n 发帖数: 511 | 5 Hmm, 我没考虑到还有循环的问题。实际数据看起来没有。
如果不允许循环,用SQL可以怎么做?他们以前用Java写的,但我没找到源代码。 |
s**********o 发帖数: 14359 | 6 SQL也是循环,不循环你那里知道从哪到哪,有多少层,什么时候结束
你这个不是DATA STRUCTURE里的GRAPH吗?
【在 o******n 的大作中提到】 : Hmm, 我没考虑到还有循环的问题。实际数据看起来没有。 : 如果不允许循环,用SQL可以怎么做?他们以前用Java写的,但我没找到源代码。
|
o******n 发帖数: 511 | 7 我不懂gragh诶。。。那我怎么表达我的意思,就是不允许链里面有重复的元素。 |
s**********o 发帖数: 14359 | 8 这回看出来了,不是专业的,你说的这些跟数据库没啥关系,数据库是关系型数据库
只管存贮和取用,建TREE,LINKED LIST, QUEUE STACK GRAPH这些都是数据结构和算法
的问题,
CS123自己去学吧
【在 o******n 的大作中提到】 : 我不懂gragh诶。。。那我怎么表达我的意思,就是不允许链里面有重复的元素。
|
w****w 发帖数: 521 | |
w****w 发帖数: 521 | 10 with cte_table as (
选择 id,company1,company2, 1 AS level, company1+' '+company2 as path
从 your_table
union all
选择 a.id,a.company1,b.company2,a.level+1,a.path+' '+b.company2
从 cte_table a join your_table b a.company2 = b.company1
哪里 a.level < 100
)
选择 top 1 *
从 cte_table
哪里 level <100
顺序 by level desc; |
j*********n 发帖数: 74 | 11 可以的 你说的sql的是支持recursion 的数据库 |