boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - Linkedin电面的一道SQL题
相关主题
问个SQL
SQL interview question
SQL find distinct values in large table (转载)
error of executing SQL query of string concatenation (转载
谷歌 电面
Twitter电面未通过
设计数据库,十亿用户,几十种爱好,要求快速查询
SQL, recruiter发过来的面试题
C#, recruiter发过来的面试题
C#, recruiter发过来的面试题, 帮我看看解答
相关话题的讨论汇总
话题: select话题: parents话题: child话题: sql话题: temparents
进入JobHunting版参与讨论
1 (共1页)
j****n
发帖数: 190
1
平时用SQL都处理简单的问题,今天电面被问到,几分钟内还真是不知道怎么处理:
有一个table A,2 columns, 5 rows as follows:
Children parents
a b
b c
c d
e f
f g
可以看到b是a的parent,c是b的parent,以此类推。要求找出最顶端的"祖宗",即返回
以下table:
a d
b d
c d
e g
f g
想知道用SQL怎么处理呢?
d******a
发帖数: 238
2
这个得写个pl/sql的函数吧,我感觉select语句做不了。
w**z
发帖数: 8232
3
start with/connect by in oracle

【在 j****n 的大作中提到】
: 平时用SQL都处理简单的问题,今天电面被问到,几分钟内还真是不知道怎么处理:
: 有一个table A,2 columns, 5 rows as follows:
: Children parents
: a b
: b c
: c d
: e f
: f g
: 可以看到b是a的parent,c是b的parent,以此类推。要求找出最顶端的"祖宗",即返回
: 以下table:

j****n
发帖数: 190
4
找到一个答案:http://www.adp-gmbh.ch/ora/sql/connect_by.html
从未用过也不知道start with/connect by,sigh...
有没有其他方法可以用简单的SQL语句解决的呢?
t***t
发帖数: 6066
5
select t.child, roots.parent from
test_conn t, (select parent from test_conn p where not exists (select child
from test_conn c where c.child=p.parent)) roots
where roots.parent in (select parent from test_conn m start with m.child=t.
child connect by prior parent=child)
奶奶的,就算事先知道connect by,几分钟也很难写出来啊。
s******e
发帖数: 108
6
select t2.c,t2.r from
(select child c1,max(level) m from A connect by prior child=parent
group by child) t1,
(select child c, level l,connect_by_root(parent) r
from A connect by prior child=parent) t2
where t1.c1=t2.c and t1.m=t2.l
m*********h
发帖数: 764
7
MSSQL
--function
create function [dbo].[FindParents]
(
@child char(1)
)
returns char(1)
begin
Declare @temParents char(1)= null
WHILE EXISTS(SELECT * FROM A WHERE child=@child)
BEGIN
SELECT @temParents =(SELECT parents from A where child=@child)
return dbo.FindParents(@temParents)
END
IF(@temParents IS NULL)
BEGIN
SET @temParents = @child
END
return @temParents
end
--Table Name A
Child Parents
a b
b c
c d
e f
f g
--Query
SELECT child,(SELECT dbo.FindParents(child)) as parents FROM A
--Result
child parents
a d
b d
c d
e g
f g
b*******S
发帖数: 17
8
在microsoft t-sql似乎可以用WHILE加上update,再利用IN
A**u
发帖数: 2458
9
高手啊

【在 m*********h 的大作中提到】
: MSSQL
: --function
: create function [dbo].[FindParents]
: (
: @child char(1)
: )
: returns char(1)
: begin
: Declare @temParents char(1)= null
: WHILE EXISTS(SELECT * FROM A WHERE child=@child)

j****n
发帖数: 190
10
牛的~~~

【在 m*********h 的大作中提到】
: MSSQL
: --function
: create function [dbo].[FindParents]
: (
: @child char(1)
: )
: returns char(1)
: begin
: Declare @temParents char(1)= null
: WHILE EXISTS(SELECT * FROM A WHERE child=@child)

y****w
发帖数: 3747
11
都没听说过recursive CTE??
今天我刚问一个烙印怎么选排序后的第3-5行,也不会。

【在 j****n 的大作中提到】
: 平时用SQL都处理简单的问题,今天电面被问到,几分钟内还真是不知道怎么处理:
: 有一个table A,2 columns, 5 rows as follows:
: Children parents
: a b
: b c
: c d
: e f
: f g
: 可以看到b是a的parent,c是b的parent,以此类推。要求找出最顶端的"祖宗",即返回
: 以下table:

c**d
发帖数: 579
12
MS SQL Server
;WITH Hierachy (Children, Parents, L)
AS
(
--root
SELECT Parents, CAST(NULL AS VARCHAR(1)), 0 FROM A
WHERE Parents NOT IN (SELECT Children FROM A)
UNION ALL
--recursion
SELECT T.Children, CAST((CASE WHEN H.L = 0 THEN H.Children ELSE H.
Parents END) AS VARCHAR(1)), (H.L + 1) FROM A T JOIN Hierachy H
ON T.Parents = H.Children
)
SELECT Children, Parents FROM Hierachy WHERE Parents IS NOT NULL
GO
g*****e
发帖数: 282
13
实际工作里一定是写个t-sql function的,递归

【在 w**z 的大作中提到】
: start with/connect by in oracle
1 (共1页)
进入JobHunting版参与讨论
相关主题
C#, recruiter发过来的面试题, 帮我看看解答
问道sql
第一回碰到电面要背syntax 的
DW(BI) developer位置的代码测试靠什么语言?谢谢!
有没有想做SYBASE DBA的--Junior Position
BST面试题
我恨iPhone@Facebook电面
时隔一年再次得到Amazon电面机会
SQL query 求解!
amazon电面悲剧了,贡献面试题一道,攒人品
相关话题的讨论汇总
话题: select话题: parents话题: child话题: sql话题: temparents