读书人

关于一个当中表的查询

发布时间: 2012-09-11 10:49:03 作者: rapoo

关于一个中间表的查询
表A:工作
id name
1 工作A
2 工作B
3 工作C

表B:文档
id name 版本 创建日期
1 文档A A1 2012-7-20
2 文档A A2 2012-7-21
3 文档A A3 2012-7-21
4 文档B B1 2012-7-21

表C:中间表(id1:工作id,id2:文档id)
id id1 id2
1 1 1
2 1 2
3 1 3
4 2 4


希望得到的结果是:
id name 文档id 文档name 版本 文档创建日期
1 工作A 3 文档A A3 2012-7-21
2 工作B 4 文档B B1 2012-7-21
3 工作C

[解决办法]

SQL code
SELECT A.id,A.name,B.id,B.name,B.版本,B.创建日期FROM 表A AS ALEFT JOIN 表C AS C ON A.id = C.id1LEFT JOIN 表B AS B ON B.id = C.id2
[解决办法]
SQL code
--> 测试数据:[工作]IF OBJECT_ID('[工作]') IS NOT NULL DROP TABLE [工作]GOCREATE TABLE [工作]([id] INT,[name] VARCHAR(5))INSERT [工作]SELECT 1,'工作A' UNION ALLSELECT 2,'工作B' UNION ALLSELECT 3,'工作C'GO--> 测试数据:[文档]IF OBJECT_ID('[文档]') IS NOT NULL DROP TABLE [文档]GOCREATE TABLE [文档]([id] INT,[name] VARCHAR(5),[版本] VARCHAR(2),[创建日期] DATETIME)INSERT [文档]SELECT 1,'文档A','A1','2012-7-20' UNION ALLSELECT 2,'文档A','A2','2012-7-21' UNION ALLSELECT 3,'文档A','A3','2012-7-21' UNION ALLSELECT 4,'文档B','B1','2012-7-21'GO--> 测试语句:--> 测试数据:[中间表]IF OBJECT_ID('[中间表]') IS NOT NULL DROP TABLE [中间表]GOCREATE TABLE [中间表]([id] INT,[id1] INT,[id2] INT)INSERT [中间表]SELECT 1,1,1 UNION ALLSELECT 2,1,2 UNION ALLSELECT 3,1,3 UNION ALLSELECT 4,2,4GO--> 测试语句:SELECT * FROM [工作] aleft join [中间表] b on a.[id]=b.[id1] left join [文档] c on b.[id2]=c.[id]where not exists(select 1 from [中间表] where [id1]=b.[id1] and [id]>b.[id])/*id          name  id          id1         id2         id          name  版本   创建日期----------- ----- ----------- ----------- ----------- ----------- ----- ---- -----------------------1           工作A   3           1           3           3           文档A   A3   2012-07-21 00:00:00.0002           工作B   4           2           4           4           文档B   B1   2012-07-21 00:00:00.0003           工作C   NULL        NULL        NULL        NULL        NULL  NULL NULL(3 行受影响)*/ 

读书人网 >SQL Server

热点推荐