Z*****Z 发帖数: 723 | 1 最近被问了两遍。第一次是说有个员工表,每个员工有id,还有manager id。让给出员
工,找出所有的直接的或间接的manager。
第二次是有个文件系统表,每个folder有id,还有paraent id。问给了一个folder,如
何找出它包含的所有folder(直接的或者间接的)。
每问必跪。。。
这个在sql里真的有解么 |
a****i 发帖数: 14 | |
Z*****Z 发帖数: 723 | 3 学了,赞!
这个是不是在oracle里有,mysql里没有?
【在 a****i 的大作中提到】 : 用connect by呀
|
w****f 发帖数: 684 | 4 SQL 新手
select mID
from employeeTable
where eID=YourID
union
select mID
from employeeTable
where eID in ( select mID from employeeTable where eID=YourID)
Or use natural join (self join)
select fID
from folder
where parentID=YourSelected ID
【在 Z*****Z 的大作中提到】 : 最近被问了两遍。第一次是说有个员工表,每个员工有id,还有manager id。让给出员 : 工,找出所有的直接的或间接的manager。 : 第二次是有个文件系统表,每个folder有id,还有paraent id。问给了一个folder,如 : 何找出它包含的所有folder(直接的或者间接的)。 : 每问必跪。。。 : 这个在sql里真的有解么
|
Z*****Z 发帖数: 723 | 5 饿,没看太懂,A manage B manage C manage D
query D,union能把A找出来?
【在 w****f 的大作中提到】 : SQL 新手 : : select mID : from employeeTable : where eID=YourID : union : select mID : from employeeTable : where eID in ( select mID from employeeTable where eID=YourID) : Or use natural join (self join)
|
A*******1 发帖数: 985 | 6 select employee_id, manager_id
from employee
start with employ_id = given ID
connect by prior manager_id = employ_id |
a****i 发帖数: 14 | 7 他那个第一个query只能给出 emp 和 first level mgr 两个record,因为是union出来
的。那个不对...
mysql里面没有connect by loop,我刚google了一把...如果没有connect by,可能可以
用selfjoin做.....
【在 Z*****Z 的大作中提到】 : 饿,没看太懂,A manage B manage C manage D : query D,union能把A找出来?
|
w****f 发帖数: 684 | 8 "start with.. connect by " is only used Oracle SQL? Or standard sql?
【在 A*******1 的大作中提到】 : select employee_id, manager_id : from employee : start with employ_id = given ID : connect by prior manager_id = employ_id
|
t********e 发帖数: 344 | |
a****i 发帖数: 14 | 10 求detail.
我能想出来的是用pl/sql建cursor, 然后loop的时候assign mgrid=empid
【在 t********e 的大作中提到】 : self join
|
|
|
w****f 发帖数: 684 | 11
Yes. 没想出更好的
selfjoin 好像有同样的问题。除非你知道 how many levels
【在 a****i 的大作中提到】 : 他那个第一个query只能给出 emp 和 first level mgr 两个record,因为是union出来 : 的。那个不对... : mysql里面没有connect by loop,我刚google了一把...如果没有connect by,可能可以 : 用selfjoin做.....
|
w****f 发帖数: 684 | 12
co-ask?
details? 惭愧,只是月前看了一周SQL, 还未到用cursor, loop的程度。
【在 a****i 的大作中提到】 : 求detail. : 我能想出来的是用pl/sql建cursor, 然后loop的时候assign mgrid=empid
|
s********u 发帖数: 26 | |
L****a 发帖数: 106 | 14 assume level given, then 就不停地left join就行了呗。
【在 Z*****Z 的大作中提到】 : 最近被问了两遍。第一次是说有个员工表,每个员工有id,还有manager id。让给出员 : 工,找出所有的直接的或间接的manager。 : 第二次是有个文件系统表,每个folder有id,还有paraent id。问给了一个folder,如 : 何找出它包含的所有folder(直接的或者间接的)。 : 每问必跪。。。 : 这个在sql里真的有解么
|
b******u 发帖数: 81 | 15 Interesting question.
http://msdn.microsoft.com/en-us/library/ms186243%28SQL.105%29.a
Recursive Queries Using Common Table Expressions |
j*x 发帖数: 302 | |
k*******t 发帖数: 144 | 17 之前数据库的课上老师说到这个题,不过是从原理上讲的,答案是:一句sql解决不了
,因为每次只能获得一层关系,要获所有的间接或直接的关系,这个层数是不确定的,
sql无法做不确定的东西。个人感觉只能用plsql,用cursor之类的来写啦。
【在 j*x 的大作中提到】 : 这题有mysql的非手动的答案吗?
|
A***o 发帖数: 358 | 18 用一句SQL写不出来,标准SQL是建在non-recursive datalog上的 |
B*****g 发帖数: 34098 | 19 http://www.mitbbs.com/article_t/Database/31179893.html
http://www.mitbbs.com/article_t/Database/31180239.html
【在 Z*****Z 的大作中提到】 : 最近被问了两遍。第一次是说有个员工表,每个员工有id,还有manager id。让给出员 : 工,找出所有的直接的或间接的manager。 : 第二次是有个文件系统表,每个folder有id,还有paraent id。问给了一个folder,如 : 何找出它包含的所有folder(直接的或者间接的)。 : 每问必跪。。。 : 这个在sql里真的有解么
|
n*******k 发帖数: 100 | |
|
|
c********p 发帖数: 1969 | |
n*******k 发帖数: 100 | 22 这种题目的变种,六度分隔( six degree of separation )sql有没有什么好方法?
比如,有一个表: table friend;列举了一些朋友关系。
问:给你两个人名,这2个人在6层朋友关系内能否联系起来? |
c******y 发帖数: 3269 | 23 不是plsql的话,可以考虑用loop,test一下i需要的最大值 |
s*****m 发帖数: 8094 | 24 这种傻逼问题做大系统都是要死人的。
【在 Z*****Z 的大作中提到】 : 最近被问了两遍。第一次是说有个员工表,每个员工有id,还有manager id。让给出员 : 工,找出所有的直接的或间接的manager。 : 第二次是有个文件系统表,每个folder有id,还有paraent id。问给了一个folder,如 : 何找出它包含的所有folder(直接的或者间接的)。 : 每问必跪。。。 : 这个在sql里真的有解么
|
a**********3 发帖数: 64 | |