由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Database版 - 问个sql的题目
相关主题
T-SQL Update Statement Question同事被FIRE掉了
请教一个问题15万收入怎么样
今典问题: 这个Self Query咋写?谁有临阵磨枪的有关SQL Server的题目?
zz: Oracle推出免费数据库产品SQL Server table variable 的一个问题请教。
问一个关于SQL的问题webbew SQL问题解法2 -- SQL 利器Recursive CTE
SP is less performance than Direct SQL Query if using CTE?养老院人事 SQL难题解法综述 -- 申精
有趣的Join问题,源于SQL和SAS比较。求助SQL高手,这个join怎么做比较好
Interesting Data Manipulation question最近写了不少SQL script,请大牛评价下属于什么水平
相关话题的讨论汇总
话题: company2话题: company1话题: sql话题: cte话题: table
进入Database版参与讨论
1 (共1页)
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
9
用CTE做应该很简单。贴不了SQL代码。
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 的数据库
1 (共1页)
进入Database版参与讨论
相关主题
最近写了不少SQL script,请大牛评价下属于什么水平问一个关于SQL的问题
能提供几个看似简单 实际不容易的关于数据库 SQL的问题么 (转载)SP is less performance than Direct SQL Query if using CTE?
如何在oracle8i中得到视图和表的定义?有趣的Join问题,源于SQL和SAS比较。
SQL问题Interesting Data Manipulation question
T-SQL Update Statement Question同事被FIRE掉了
请教一个问题15万收入怎么样
今典问题: 这个Self Query咋写?谁有临阵磨枪的有关SQL Server的题目?
zz: Oracle推出免费数据库产品SQL Server table variable 的一个问题请教。
相关话题的讨论汇总
话题: company2话题: company1话题: sql话题: cte话题: table