首页 新闻 会员 周边 捐助

求写SQL语句。

0
悬赏园豆:10 [已解决问题] 解决于 2013-09-17 10:43

有一个数据表TableA如下表, 数据是模拟的。其中Id是主键,Parent是一个外键,外键的值指向其自身.

Id

Name

Degree

Parent(TableA:Id)

1

NameA

2

5

2

NameB

3

1

3

NameC

3

1

4

NameD

4

2

5

NameE

1

 

6

NameF

5

4

 

查询语句的结果须是Degree值大于2的记录,如对与上表中的数据,符合Degree值大于2的记录如下所示:

Id

Name

Degree

Parent(TableA:Id)

2

NameB

3

1

3

NameC

3

1

4

NameD

4

2

6

NameF

5

4

然后须查找Parent值指向的记录不存在的记录,对于上表,查询结果如下:

Id

Name

Degree

Parent(TableA:Id)

2

NameB

3

1

3

NameC

3

1

请问Sql语句怎么些呢?谢谢.

PS:请在写SQL语句的时候注意运行效率

sikla的主页 sikla | 初学一级 | 园豆:27
提问于:2013-09-16 14:00
< >
分享
最佳答案
0

SELECT * FROM TableA WHERE Degree > 2 AND Parent NOT IN (SELECT Id FROM TableA WHERE Degree > 2) 

 

要递归那就写公用表表达式。http://www.cnblogs.com/kissdodog/p/3153012.html

收获园豆:4
逆心 | 初学一级 |园豆:160 | 2013-09-16 14:29

一直在想有没有"临时存储结果集"的东东,因为我怀疑SELECT * FROM TableA WHERE Degree > 2 AND Parent NOT IN (SELECT Id FROM TableA WHERE Degree > 2)语句中红色背景代码,每查询一条记录执行一次,会影响效率,谢谢

sikla | 园豆:27 (初学一级) | 2013-09-17 10:48
其他回答(3)
0

客户端递归,数据库中无法确定你的树深度是多少~

收获园豆:2
幻天芒 | 园豆:37205 (高人七级) | 2013-09-16 14:22

需要递归吗?我是想获得符合条件的最上层的节点,所以对于符合条件的节点,就查询它的父节点是否存在,如果父节点不存在就显示这些数据.

支持(0) 反对(0) sikla | 园豆:27 (初学一级) | 2013-09-16 14:56

@sikla: 不考虑父节点的父节点???

支持(0) 反对(0) 幻天芒 | 园豆:37205 (高人七级) | 2013-09-16 15:29

@幻天芒: 要考虑啊,子节点、父节点、父节点的父节点都在一个表中,遍历到子节点的时候,是判断子节点的父节点是否存在.遍历到父节点的时候,是判断父节点的父节点是否存在,如果存在,就显示父节点的父节点,如果不存在,就显示父节点.我写了一个语句,但是查询耗时太长,请教大侠帮助写一条查询语句.

支持(0) 反对(0) sikla | 园豆:27 (初学一级) | 2013-09-16 16:11

@sikla: 我的建议是读取到客户端,用C#代码实现。对于树形结构,层次不确定的情况下,sql语句不太好写。

支持(0) 反对(0) 幻天芒 | 园豆:37205 (高人七级) | 2013-09-16 20:08
0

SELECT * FROM (SELECT * FROM TableA A WHERE A.DEGREE>2) AS T1 WHERE T1.PARENT NOT IN(SELECT ID FROM TABLEA B WHERE B.DEGREE>2)

收获园豆:2
翟中龙 | 园豆:97 (初学一级) | 2013-09-16 17:21
0

SELECT * FROM TableA WHERE Degree > 2 AND Id NOT IN (SELECT Parent FROM TableA WHERE Degree > 2) 

试试这句哦

 

收获园豆:2
t101lian | 园豆:32 (初学一级) | 2013-09-16 17:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册