在写SQL语句时什么时候需要用到自表关联,谁能举个完整的例子?

如题所述

比如公司的部门结构,
人事部门,他的下级 考勤科,数据存储在一个表中
org_code = 考勤科, up_org_code = 人事部门
,表名是人事 表,我需要查询人事的上下级部门关系,则需要

select B.org_code, A.org_code
from 人事表 A, 人事表 B
where A.up_org_code = b.org_code
;

结果就是 人事部门 -> 考勤科
明白了吗?
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-07-07
以前SQL Server有一个示例数据库northwind,该数据库中包含一个员工信息表employees,其中每个员工的信息包括employeeid,firstname,lastname,reportsto等,其中reportsto表示员工向哪个领导汇报工作。
这里可以使用一个自身连接来描述员工向谁汇报工作的情况
select t1.lastname+t1.firstname as 姓名,
'向',t2.lastname+t2.firstname,
'汇报工作'
from employees t1 join employees t2
on t1.reportsto=t2.employeeid
得到的结果如下所示:
姓名
------------------------------ ---- ------------------------------ --------
DavolioNancy 向 FullerAndrew 汇报工作
LeverlingJanet 向 FullerAndrew 汇报工作
PeacockMargaret 向 FullerAndrew 汇报工作
BuchananSteven 向 FullerAndrew 汇报工作
SuyamaMichael 向 BuchananSteven 汇报工作
KingRobert 向 BuchananSteven 汇报工作
CallahanLaura 向 FullerAndrew 汇报工作
DodsworthAnne 向 BuchananSteven 汇报工作
Oracle数据库里也有一个emp表,与此类似
emp表包括字段:员工号empno,姓名ename,经理是谁mgr
执行以下sql语句:
select e1.ename,'works for',e2.ename from scott.emp e1,scott.emp e2 where e1.mgr=e2.empno;
结果:
ENAME 'WORKSFOR ENAME
---------- --------- ----------
SCOTT works for JONES
FORD works for JONES
ALLEN works for BLAKE
WARD works for BLAKE
JAMES works for BLAKE
TURNER works for BLAKE
MARTIN works for BLAKE
MILLER works for CLARK
ADAMS works for SCOTT
JONES works for KING
CLARK works for KING
相似回答