日期:2014-05-18 浏览次数:20820 次
select a.id,申请人=b.姓名, 经办人=c.姓名,负责人=d.姓名,a.合同内容 from 合同表 a left join 人力表 b on a.申请人=b.id left join 人力表 c on a.经办人=c.id left join 人力表 d on a.负责人=d.id
------解决方案--------------------
declare @ta table (id int,va varchar(10)) declare @tb table (id int,vb varchar(10)) insert into @ta select 1,'aa' insert into @ta select 2,'bc' insert into @ta select 3,'ccc' insert into @tb select 1,'2' insert into @tb select 3,'58' insert into @tb select 4,'67' --内连接简单写法 select a.id,a.va,b.id,b.vb from @ta a,@tb b where a.id=b.id --内连接 select a.id,a.va,b.id,b.vb from @ta a inner join @tb b on a.id=b.id select a.id,a.va,b.id,b.vb from @ta a join @tb b on a.id=b.id --左连接(左外连接) --返回left join 子句中指定的左表的所有行,以及右表所匹配的行。 select a.id,a.va,b.id,b.vb from @ta a left join @tb b on a.id=b.id select a.id,a.va,b.id,b.vb from @ta a left outer join @tb b on a.id=b.id --右连接(右外连接) --返回right join 子句中指定的右表的所有行,以及左表所匹配的行。 select a.id,a.va,b.id,b.vb from @ta a right join @tb b on a.id=b.id select a.id,a.va,b.id,b.vb from @ta a right outer join @tb b on a.id=b.id --完整外连接 --等同左连接+右连接 select a.id,a.va,b.id,b.vb from @ta a full join @tb b on a.id=b.id select a.id,a.va,b.id,b.vb from @ta a full outer join @tb b on a.id=b.id --交叉连接 --没有两个表之间关系的交叉连接,将产生连接所涉及的表的笛卡尔积。 select a.id,a.va,b.id,b.vb from @ta a cross join @tb b select a.id,a.va,b.id,b.vb from @ta a,@tb b --自连接 --一个表和其本身连接。 select a.id,a.va,b.id,b.va from @ta a,@ta b where a.id=b.id+1
------解决方案--------------------
SELECT A.id,B.name AS 申请人,C.name AS 经办人,D.name AS 负责人
FROM 合同表 AS A
JOIN 人力表 AS B
ON A.申请人=B.id
JOIN 人力表 AS C
ON A.经办人=C.id
JOIN 人力表 AS D
ON A.负责人=D.id
------解决方案--------------------
---------------------------------
-- Author: htl258(Tony)
-- Date : 2009-08-02 13:42:15
---------------------------------
--> 生成测试数据表:合同表
If not object_id('[合同表]') is null
Drop table [合同表]
Go
Create table [合同表]([Id] int,[申请人] int,[经办人] int,[负责人] int,[合同内容] nvarchar(10))
Insert 合同表
Select 1,01,02,03,'埃保常' union all
Select 2,03,03,04,'aggressive' union all
Select 3,05,04,05,'嘎嘎' union all
Select 4,02,02,02,'大厦噶尔外国'
Go
--Select * from 合同表
--> 生成测试数据表:人力表
If not object_id('[人力表]') is null
Drop table [人力表]
Go
Create table [人力表]([id] int,[姓名] nvarchar(2))
Insert 人力表
Select 01,'张三' union all
Select 02,'李四' union all
Select 03,'王五' union all
Select 04,'小二' union all
Select 05,'大傻'
Go
--Select * from 人力表
-->SQL查询如下:
select a.Id,b.[姓名] [申请人],c.姓名 [经办人],d.姓名 [负责人],合同内容
from 合同表 a
join 人力表 b
on a.申请人=b.id
join 人力表 c
on a.经办人=c.id
join 人力表 d
on a.负责人=d.id
order by 1
/*
Id 申请人 经办人 负责人 合同内容
----------- ---- ---- ---- ----------
1 张三 李四 王五 埃保常
2 王五 王五 小二 aggressive
3 大傻 小二 大傻 嘎嘎
4 李四 李四 李四 大厦噶尔外国
(4 行受影响)
*/
------解决方案--------------------
---------------------------------
-- Author: htl258(Tony)
-- Date : 2009-08-02 13:42:15
---------------------------------
--> 生成测试数据表:合同表
If not object_id('[合同表]') is null
Drop table [合同表]
Go
Create table [合同表]([Id] int,[申请人] int,[经办人] int,[负责