工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 3907|回复: 19

office access的问题,急

[复制链接]
发表于 2007-10-23 19:44 | 显示全部楼层 |阅读模式
access中有两个表,其中一个包含所有人姓名\学号,另外一个包含部分人的学号,把这一部分人的姓名从另一个表对应出来,怎么办?
发表于 2007-10-23 19:58 | 显示全部楼层
你说的“对应出来”是指建立对应关系还是要把表的东西拿出来?

最好把两个表的结构告诉一下
回复

使用道具 举报

 楼主| 发表于 2007-10-23 20:56 | 显示全部楼层
表一

学号 姓名
001  张三
002  李四
003  黄五
004  林六

表二

学号 姓名
002  
003  

想把表2通过表一实现姓名,得出如下结果

表二

学号 姓名
002  李四
003  黄五


两个表在同一个数据库文件里,*.mdb那种
回复

使用道具 举报

发表于 2007-10-23 22:17 | 显示全部楼层
最简单好像是利用access查询视图的功能
这样还可以生成相应的sql代码

直接代码写好像是
select   表1.学号,表1.姓名
from  表1 inner join  表2  on  表1.学号=表2.学号
对么

[ 本帖最后由 南网情深 于 2007-10-23 22:23 编辑 ]
回复

使用道具 举报

发表于 2007-10-23 22:19 | 显示全部楼层
好像access不支持子查询的,不知道怎么实现。

如果只是一个一个地从表1添到表2就可以用追加查询实现

只能帮顶了
回复

使用道具 举报

发表于 2007-10-23 22:24 | 显示全部楼层
access支持多表联合查询的,做过一次

[ 本帖最后由 南网情深 于 2007-10-23 22:26 编辑 ]
回复

使用道具 举报

发表于 2007-10-23 22:29 | 显示全部楼层
刚刚试试了下,发现一个方法勉强可以。使用生成表查询

sql视图下看到:

SELECT 表1.学号, 表1.姓名 INTO 表3
FROM 表1 INNER JOIN 表2 ON 表1.学号 = 表2.学号
WHERE (((表1.学号)=[表2].[学号]));

查询视图设计界面
回复

使用道具 举报

发表于 2007-10-23 22:41 | 显示全部楼层
搭台问问
表1

编号  |    类型       |    使用人  |   部门
1        |  台式电脑 |     甲        |     a
2        |  台式电脑 |     乙        |     b
3        |  台式电脑 |     丙        |     c



表2

编号 |    类型        |    使用人  |   部门
1        |  笔记本     |     乙         |     b
2        |  笔记本     |     丁         |     d



我要达到下面目的:


部门     |    类型        |    使用人
a          |    台式机     |    甲
b          |    台式机     |    乙
b          |    笔记本     |    乙
c          |    台式机     |    丙
d          |    笔记本     |    丁


主要为了我后面可以分组group by 部门
看每个部门每种设备多少台
然后count(台式机) count(笔记本)多少台


前面那个表怎么查询出来呢
或者还有其他方法吗
只要能分部门查出不同设备的数目就行了

[ 本帖最后由 南网情深 于 2007-10-23 22:53 编辑 ]
回复

使用道具 举报

发表于 2007-10-23 23:32 | 显示全部楼层
原帖由 南网情深 于 2007-10-23 22:41 发表
搭台问问
表1

编号  |    类型       |    使用人  |   部门
1        |  台式电脑 |     甲        |     a
2        |  台式电脑 |     乙        |     b
3        |  台式电脑 |     丙        |     c
...


select count(xx.类型) as c  from (select * from 表1 union select * from  表2) as xx group by xx.部门;
回复

使用道具 举报

发表于 2007-10-24 01:00 | 显示全部楼层
晕,发现一个问题 union要求联合查询的两表列数要相同
我实际表的列数不相同的
回复

使用道具 举报

发表于 2007-10-24 01:01 | 显示全部楼层
改join看看
回复

使用道具 举报

发表于 2007-10-24 11:35 | 显示全部楼层
再请教一下,我实际情形大概是这样的
我有两个表

一个是记载台式机参数的,如cpu,内存,所属部门,使用人等等
另一个表是记载笔记本的,也是笔记本的一些参数,大概和上表差不多的参数,不过列没上表多,例如台式机有显示器字段,笔记本没显示器字段

粗略为下面所示
台式机表名:shebei_ts
tsid    |   sb_bumen    |    sb_ren  |   ts_neicun   |   ts_zhupin   |   ts_xianshi  |
1
2
3
4
5
6
.......
这里行数是最多的,也就是台式机人手一台

笔记本表名:shebei_nb
nbid    |   sb_bumen    |    sb_ren  |   ts_neicun   |   ts_zhupin   |  
1
2
...


笔记本的列少,行也少
也就是笔记本不是人手一台,只是部分人有

我用下面sql语句查询,基本上满足条件:以部门分组,计算每个部门每种设备的数量

select shebei_ts.sb_bumen,count(shebei_ts.sb_leixing),count(shebei_nb.sb_leixing)
from shebei_ts left join shebei_nb on shebei_ts.sb_ren=shebei_nb.sb_ren
group by shebei_ts.sb_bumen


但是有个问题,按照这样的方法,一人一电脑还可以,但是出现一人多部电脑时间,笔记本的计数就会不正确

查询的表大概是这样:

shbei_ts.bumen   |  shebei_ts.ren  |  shebei_ts.leixing  |   shebei_nb.leixing
部门a                       |      人a                 |          台式机      |         笔记本
部门a                       |      人a                 |          台式机      |         笔记本


实际上,人a只有一个笔记本,两台主机
但是因为left join on  表1.ren=表2.ren
所以有这个问题出现

请问有什么思路或者方法可以避免这样的误算呢
新手,麻烦指导一下

[ 本帖最后由 南网情深 于 2007-10-24 14:17 编辑 ]
回复

使用道具 举报

发表于 2007-10-24 19:32 | 显示全部楼层
最简单方法,为笔记本表增加表示显示器的字段,反正台式与笔记本的差别也只在这点而已,^_^

如果现在才开始设计表,可以考虑把两个表设计成一个表,增加类型type字段区分台式与笔记本

按目前情况,试试生成临时表以达到目的
回复

使用道具 举报

发表于 2007-10-24 20:16 | 显示全部楼层
问题是我还要嵌套其他几个表,如打印机、复印机、传真机
他们的表结构和台式机笔记本完全不同的
表已经设计好了
这次是二次扩展
所以暂时想不动原来的表,或者小动作动
回复

使用道具 举报

发表于 2007-10-24 21:32 | 显示全部楼层
原帖由 南网情深 于 2007-10-24 01:00 发表
晕,发现一个问题 union要求联合查询的两表列数要相同
我实际表的列数不相同的



并不是完全如此

你可以选择相同字段进行union

如:

select ts.sb_bumen from shebei_ts as ts union select nb.sb_bumen from shebei_nb as nb
回复

使用道具 举报

发表于 2007-10-25 00:53 | 显示全部楼层
嗯,谢谢,基本实现要求了


select ts.sb_bumen,ts.sb_leixing from shebei_ts as ts union all select nb.sb_bumen,nb.sb_leixing from shebei_nb as nb
order by ts.sb_bumen
未命名.JPG
回复

使用道具 举报

发表于 2007-10-25 01:51 | 显示全部楼层
可以了
5个表连接,眼花缭乱
  1. SELECT *
  2. FROM [select tndf.sb_bumen,tndf.sb_leixing from (select tnd.sb_bumen,tnd.sb_leixing from (select tn.sb_bumen,tn.sb_leixing from (select ts.sb_bumen,ts.sb_leixing from shebei_ts as ts UNION ALL select nb.sb_bumen,nb.sb_leixing from shebei_nb as nb) as tn union all select dy.sb_bumen,dy.sb_leixing from shebei_dy as dy) as tnd union all select fy.sb_bumen,fy.sb_leixing from shebei_fy as fy) as tndf union all select cz.sb_bumen,cz.sb_leixing from shebei_cz as cz]. AS tndfc
  3. ORDER BY tndfc.sb_bumen, tndfc.sb_leixing;
复制代码

[ 本帖最后由 南网情深 于 2007-10-25 01:55 编辑 ]
未命名.JPG
回复

使用道具 举报

发表于 2007-10-25 02:09 | 显示全部楼层
不过,还是有点不对劲
我的目的是想这样

sql查询语句;
<%do while not rs.eof%>        //下面是一个表格
|---------------------------------------------|---------------------------------------------|
|                                                         |台式机台数:<%=rs(count(.....))%>
|部门:                                                 |----------------------------------------------|
|<%=rs("tndfc.bumen")%>                  |笔记本台数:<%=rs(count(.....))%>
|                                                          |---------------------------------------------|
|                                                          ..............................................................
|                                                           ............................................................
|------------------------------------------------|---------------------------------------------|
<% rs.movenext
  loop
rs.close
set rs=nothing
%>


如果在17F查询出来的table的基础上搞
那么我不是要搞很多个where tndfc.sb_leixing="台式机"
where tndfc.sb_leixing="笔记本".......................
那样就不能完成我rs.movenext自动生成上面的形式?


我能不能在一个语句里面写完所有查询
例如这样:
select sb_bumen,count(sb_bumen="台式机"),count(sb_bumen="笔记本"),count(sb_bumen="打印机"),count(sb_bumen="传真机"),count(sb_bumen="复印机" )
from tndfc


,不知道有没人明白我说什么,我也不知道是不是说得稀里糊涂的,明早再试试

[ 本帖最后由 南网情深 于 2007-10-25 02:22 编辑 ]
回复

使用道具 举报

发表于 2007-10-26 00:37 | 显示全部楼层
按照ppt的思路,我五个表每张表都建了一个冗余的字段来相互对应,基本上实现了目的
  1. SELECT *
  2. FROM [select * from (select * from (select * from (select ts.sb_bumen,ts.sb_leixing,ts.nb,ts.dy,ts.fy,ts.cz from shebei_ts as ts UNION ALL select nb.sb_bumen,nb.ts,nb.sb_leixing,nb.dy,nb.fy,nb.cz from shebei_nb as nb) as tn union all select dy.sb_bumen,dy.ts,dy.nb,dy.sb_leixing,dy.fy,dy.cz from shebei_dy as dy) as tnd union all select fy.sb_bumen,fy.ts,fy.nb,fy.dy,fy.sb_leixing,fy.cz from shebei_fy as fy) as tndf union all select cz.sb_bumen,cz.ts,cz.nb,cz.dy,cz.fy,cz.sb_leixing from shebei_cz as cz]. AS tndfc
  3. ORDER BY tndfc.sb_bumen;
复制代码

[ 本帖最后由 南网情深 于 2007-10-26 00:42 编辑 ]
更多图片 小图 大图
组图打开中,请稍候......
回复

使用道具 举报

发表于 2007-10-26 00:51 | 显示全部楼层
SELECT * FROM [select * from (select * from (select * from (select ............
层层select,o(∩_∩)o...

恭喜!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-5-15 07:15

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表