注:我原先写树形的组织结构的时候可以用这个的 :见CSDN博客:program.diary
一张表可以自我连接.进行自连接时我们需要一个机制来区别一个表的两个实例. 在FROM clause(子句)中我们可以给这个表不同的别名 - 然后在语句中其它需要使用到该别名的地方用dot(点)来连接该别名和字段名.
[@more@]用公交线路表来演示self joins(自连接)
Self join of route on (num, company)
我们可以把route(公交线路表)用字段对 (num, company) 来进行自连接. 结果是什么意思呢?你可以知道每条公交线路的任意两个可联通的车站.
SELECT * FROM route R1, route R2 WHERE R1.num=R2.num AND R1.company=R2.company
查询结果超过11000条记录.下面显示了部分记录. 其中有121 条关于LRT 1的线路,该线路有11个车站,所有11*11=121条记录. 这是一条环线,第一站和最后一站相同.
num | company | pos | stop | num_1 | company_1 | pos_1 | stop_1 |
---|---|---|---|---|---|---|---|
1 | LRT | 1 | 134 | 1 | LRT | 7 | 217 |
1 | LRT | 1 | 134 | 1 | LRT | 11 | 134 |
1 | LRT | 1 | 134 | 1 | LRT | 10 | 79 |
... | |||||||
1 | LRT | 2 | 97 | 1 | LRT | 7 | 217 |
1 | LRT | 2 | 97 | 1 | LRT | 11 | 134 |
... | |||||||
2 | LRT | 9 | 31 | 2 | LRT | 11 | 217 |
2 | LRT | 9 | 31 | 2 | LRT | 1 | 168 |
... |
Self join of route on stop
我们还可以用stop字段来对route(公交线路表)进行自连接. 查询的结果就是共用同一车站的公交线组合.
SELECT * FROM route R1, route R2 WHERE R1.stop=R2.stop;
下表就是共享53号'Craiglockhart'车站的一些公交线路.
num | company | pos | stop | num_1 | company_1 | pos_1 | stop_1 |
---|---|---|---|---|---|---|---|
47 | LRT | 4 | 53 | 47 | LRT | 4 | 53 |
47 | LRT | 4 | 53 | 27 | LRT | 6 | 53 |
47 | LRT | 4 | 53 | 10 | LRT | 8 | 53 |
47 | LRT | 4 | 53 | 45 | LRT | 7 | 53 |
47 | LRT | 4 | 53 | 4 | LRT | 6 | 53 |
10 | LRT | 8 | 53 | 47 | LRT | 4 | 53 |
10 | LRT | 8 | 53 | 27 | LRT | 6 | 53 |
10 | LRT | 8 | 53 | 10 | LRT | 8 | 53 |
... |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/226700/viewspace-911451/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/226700/viewspace-911451/