| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 906 人关注过本帖
标题:[求助]如何实现这种多表查询结果?
只看楼主 加入收藏
jockey
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:977
专家分:52
注 册:2005-12-4
结帖率:33.33%
收藏
 问题点数:0 回复次数:9 
[求助]如何实现这种多表查询结果?
A、B、C、D四个表,表结构及记录如下:

A:id,姓名,性别
1 王某 男
2 李某 男

B:Aid,课程,得分
1 历史 80
2 政治 90
1 政治 75

C:Aid,宿舍
1 801#

D:Aid,出勤
2 满勤

我想通过查询姓名为“王某”的一些情况: 姓名-课程-得分-宿舍-出勤

select A.姓名,B.课程,B.得分,C.宿舍,D.出勤 from A,B,C,D where B.Aid=A.id and C.Aid=A.id and D.Aid=A.id

查询的结果为 空,看了一下主要原因是D表中没有Aid为1的纪录。
我想实现的结果为(课程、得分超过1条纪录则合并):

姓名 课程 得分 宿舍 出勤
王某 历史、政治 155 801#

如果查询"李某"结果如下:
姓名 课程 得分 宿舍 出勤
李某 政治 90 满勤



搜索更多相关主题的帖子: 结果 查询 
2007-05-11 12:37
bruce
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:1170
专家分:10
注 册:2005-3-31
收藏
得分:0 
D表中没有1的ID 当然查不到

小時候家里很穷,买不起自行车,我只好每天打的士上学。初中的时候就因为我成绩太突出,学校领导留我多读两年.初中毕业后,高中的校长觉得我有前途.就多收了我3万元人民币,高2的時候,班主任认为我有很强的独立生存能力,于是让我退了学.最后我看破红尘.决定从此嚣张!
2007-05-11 13:59
bruce
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:1170
专家分:10
注 册:2005-3-31
收藏
得分:0 

A:id,姓名,性别
1 王某 男
2 李某 男

B:Aid,课程,得分
1 历史 80
2 政治 90
1 政治 75

C:Aid,宿舍
1 801#
2 NULL

D:Aid,出勤
1 NULL
2 满勤


小時候家里很穷,买不起自行车,我只好每天打的士上学。初中的时候就因为我成绩太突出,学校领导留我多读两年.初中毕业后,高中的校长觉得我有前途.就多收了我3万元人民币,高2的時候,班主任认为我有很强的独立生存能力,于是让我退了学.最后我看破红尘.决定从此嚣张!
2007-05-11 14:01
jockey
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:977
专家分:52
注 册:2005-12-4
收藏
得分:0 
谢谢!
但是D表中我不想出现这个纪录 1 NULL

有什么办法么?

2007-05-11 14:06
棉花糖ONE
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:2987
专家分:0
注 册:2006-7-13
收藏
得分:0 
if object_id('dbo.fn_c') is not null
drop function dbo.fn_c
go
create function dbo.fn_c(@id int)
returns varchar(200)
as
begin
declare @a varchar(20)
select @a=''
select @a=@a+课程+',' from b where aid=@id
select @a=left(rtrim(@a),len(rtrim(@a))-1)
return @a
end
go
select 姓名,dbo.fn_c(t.id) as 科目,宿舍,出勤,sum(score) as 成绩 from
(select id,A.姓名,B.课程,B.得分 as score,C.宿舍,D.出勤 from A,B,C,D where B.Aid=A.id and C.Aid=A.id and D.Aid=A.id) as t
group by 姓名,宿舍,出勤,id

26403021 sql群 博客 blog./user15/81152/index.shtml
2007-05-11 16:07
jockey
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:977
专家分:52
注 册:2005-12-4
收藏
得分:0 
马上就试试

2007-05-11 17:30
jockey
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:977
专家分:52
注 册:2005-12-4
收藏
得分:0 
相当感谢棉花糖ONE!问题解决!

看来sql要学的东西相当多啊,努力!

2007-05-11 22:12
jockey
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:977
专家分:52
注 册:2005-12-4
收藏
得分:0 

棉花糖ONE斑竹大人:
但是D表中如果没有纪录: 1 NULL
则,显示的数据就少了一条
where B.Aid=A.id and C.Aid=A.id and D.Aid=A.id) as t


我的意思是,C库、D库有值则取值,没有值但不影响

比如:我想列出如下内容:

id 姓名 性别 课程 得分 宿舍 出勤
1 王某 男 历史、政治 155 801#
2 李某 男 政治 90 满勤

但是如果加上这个条件:B.Aid=A.id and C.Aid=A.id and D.Aid=A.id就可能查询结果为空了!


2007-05-11 23:05
棉花糖ONE
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:2987
专家分:0
注 册:2006-7-13
收藏
得分:0 
这样的话不能用内连接,要改成外联接,左联接或者右连接

26403021 sql群 博客 blog./user15/81152/index.shtml
2007-05-12 13:52
Kendy123456
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:62
帖 子:2720
专家分:0
注 册:2007-1-3
收藏
得分:0 
用left join就ok


2007-05-14 17:48
快速回复:[求助]如何实现这种多表查询结果?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018719 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved