| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 613 人关注过本帖
标题:请教多表查询?
只看楼主 加入收藏
zuoguangxin
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-9-15
收藏
 问题点数:0 回复次数:7 
请教多表查询?
我现在有表1,表2,表3,这些表结构相同,姓名(其中的一个字段),
想查询 姓名(其中的一个字段),
问题1,是:3个表中姓名字段都出现的姓名有那些。表1,姓名=表2,姓名=表3的姓名。
问题2,是查询,3个表中只要其中两个表中出现的相同的姓名。如,表1,姓名=表2,姓名或是表1,姓名=表3,姓名,或是表2,姓名=表3,姓名。
问题3,如果是不只3个表,而是可能4个,5个表呢?
先谢谢那位高手指点一下。
搜索更多相关主题的帖子: 姓名 字段 查询 结构 
2007-02-05 23:14
xu2000
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:51
帖 子:3890
专家分:56
注 册:2006-4-8
收藏
得分:0 
select 姓名 from 表1,表2,表3.....
where 表1.姓名=表2.姓名 and 表3.姓名=表1.姓名

我会拿出我全部的钱财,以保你衣食无忧。我会献出我所有的智慧,以助你一帆风顺。我会想到所有的笑语,以令你展眉开颜。我会挤出最长的时间,以使你终生幸福。        [本人原创的结婚宣言]
2007-02-05 23:36
zuoguangxin
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-9-15
收藏
得分:0 
那么问题2和问题3,如何解?
2007-02-05 23:38
xu2000
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:51
帖 子:3890
专家分:56
注 册:2006-4-8
收藏
得分:0 
同样的查询。

我会拿出我全部的钱财,以保你衣食无忧。我会献出我所有的智慧,以助你一帆风顺。我会想到所有的笑语,以令你展眉开颜。我会挤出最长的时间,以使你终生幸福。        [本人原创的结婚宣言]
2007-02-05 23:40
zuoguangxin
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-9-15
收藏
得分:0 
太麻烦了,如果我有多个表,暂时不确定可能是4个或5个或50个,要用户具体选择,只想找基中两个表或超过两个表有相同的姓名,怎解?
2007-02-05 23:49
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
收藏
得分:0 
2 楼的不就是方法吗?

飘过~~
2007-02-06 08:57
Kendy123456
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:62
帖 子:2720
专家分:0
注 册:2007-1-3
收藏
得分:0 
以下是引用zuoguangxin在2007-2-5 23:49:28的发言:
太麻烦了,如果我有多个表,暂时不确定可能是4个或5个或50个,要用户具体选择,只想找基中两个表或超过两个表有相同的姓名,怎解?

创造一个临时表

create table #Name
(
Name varchar(20)
)

Insert into #Name
select 姓名 from 表1
union all
Select 姓名 from 表2
....
union all
Select 姓名 from 表50
...
有1万零一个表就写1万个unin all

然后
Select 姓名= name, 相同次数 = count(*) from #Name group by name

然后前台代码来判断哪些出现2次 哪些出现3次,4次,5次的...


2007-02-06 10:39
Kendy123456
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:62
帖 子:2720
专家分:0
注 册:2007-1-3
收藏
得分:0 

增强一下功能 给出姓名出现次数的同时 给出在哪些表中出现

drop table #Name
create table #Name
(
Name varchar(20),
tbl varchar(10)
)

Insert into #Name
select
'A','表4'
union all
select 'A','表5'
union all
select 'V','表1'
union all
select 'V','表2'
union all
select 'V','表5'
union all
select 'C','表6'
union all
select 'A','表7'
union all
select 'V','表8'

delete #name

drop table #1
create table #1
(
ID int identity(1,1),
Name varchar(100),
cnt int,
tbl varchar(10),
MaxID int,
MinID int
)

insert into #1
select a.Name,b.cnt,a.tbl,0,0 from #name a join (
select Name, count(*) as cnt from #name group by name) b
on a.name = b.name

update #1 set MaxID = b.MaxID from #1 a
join (select Name, Max(ID) as MaxID from #1 group by Name) b
on a.name = b.name
update #1 set MinID = b.MinID from #1 a
join (select Name, Min(ID) as MinID from #1 group by Name) b
on a.name = b.name

select * from #1 where ID <> MaxID and cnt<>1
while @@RowCount <> 0
begin
Update #1 set tbl = a.tbl+','+b.tbl from #1 a join (select * from #1) b
on a.Name = b.Name and a.ID = a.MinID and b.ID = b.MaxID
and a.cnt <>1
delete #1 where ID = MaxID and MaxID <> MinID
update #1 set MaxID = b.MaxID from #1 a
join (select Name, Max(ID) as MaxID from #1 group by Name) b
on a.name = b.name
update #1 set MinID = b.MinID from #1 a
join (select Name, Min(ID) as MinID from #1 group by Name) b
on a.name = b.name
select * from #1 where ID <> MaxID and cnt <>1
end

select 姓名 ='Name', 出现次数 = cnt,出现在哪些表中 = tbl from #1


2007-02-06 11:36
快速回复:请教多表查询?
数据加载中...
 
   



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

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