注册 登录
编程论坛 ASP技术论坛

[求助] 三表查询的问题

robinbest 发布于 2007-11-17 16:38, 1495 次点击
三个表的结构如下:

公司表: (公司代码 中文名称 英文名称 公司地址 备注)
个人表: (个人代码 中文姓名 英文姓名 姓别 备注)
隶属表: (公司代码 个人代码)

要从这三个表中读取数据,SELECT语句应该怎么写?
(注意:同一个公司可能包括很多人,而一个人也可能隶属几个公司,
记录我就不举例了,相信各位高手应该看得懂我的意思了.)

Thanks
13 回复
#2
purana2007-11-17 17:21
我不知道你要查什么..所以我不知道怎么写.
#3
robinbest2007-11-17 17:51
以下是引用purana在2007-11-17 17:21:08的发言:
我不知道你要查什么..所以我不知道怎么写.

公司表: (公司代码 中文名称 英文名称 公司地址 备注)
D001 三星电子 samsung BeiJing

个人表: (个人代码 中文姓名 英文姓名 姓别 备注)
Z001 张三 zhangsan
W002 王五 wangwu

隶属表: (公司代码 个人代码)
D001 Z001
D001 W002

比如:(1)显示出个人代码"Z001"的信息(包括:公司中文名称、公司地址、中文姓名、英文姓名、姓别)
(2)再以此格式显示出个人表中所有人的上述信息

其实如果将隶属表和个人表合并,这个问题倒一点都不复杂,
关键在于同一个人可能同时隶属几个公司,所以才单独用个隶属表来表现,
这样一来,公司表和个人表就没有直接联系了。它们得通过隶属表这个中间表来建立关系。

不知道这样写清不清楚!

非常感谢!

[此贴子已经被作者于2007-11-17 18:59:56编辑过]

#4
purana2007-11-17 19:16
1.
select a.中文名称,a.公司地址,b.中文姓名,b.英文姓名,b.性别
from 公司表 a,个人表 b,隶属表 c
where a.公司代码=c.公司代码 and b.个人代码='Z001' and b.个人代码=c.个人代码

2.
select a.中文名称,a.公司地址,b.中文姓名,b.英文姓名,b.性别
from 公司表 a,个人表 b,隶属表 c
where a.公司代码=c.公司代码 and b.个人代码=c.个人代码
#5
xiuit2007-11-17 21:07
好象有个人在这里也问过类似的问题,不过说是的名片管理,形式和这个一样,可以参看一下,这个不会是你们的练习题吧?你们是一个班的吗?呵呵
#6
robinbest2007-11-17 21:12
以下是引用purana在2007-11-17 19:16:24的发言:
1.
select a.中文名称,a.公司地址,b.中文姓名,b.英文姓名,b.性别
from 公司表 a,个人表 b,隶属表 c
where a.公司代码=c.公司代码 and b.个人代码='Z001' and b.个人代码=c.个人代码

2.
select a.中文名称,a.公司地址,b.中文姓名,b.英文姓名,b.性别
from 公司表 a,个人表 b,隶属表 c
where a.公司代码=c.公司代码 and b.个人代码=c.个人代码

非常感谢 purana,
数据是查出来了,但是出了个很奇怪的问题:
公司表和个人表中有同名字段时,怎么引用?
(你用了个a.字段名、b.字段名 这样就行了,
但奇怪的是我这样用它就显示不出东西了,而用原字段名就可以,
我用a.字段名 as "别名" 也不行,真是见鬼了!

why?

#7
robinbest2007-11-17 21:15
以下是引用xiuit在2007-11-17 21:07:52的发言:
好象有个人在这里也问过类似的问题,不过说是的名片管理,形式和这个一样,可以参看一下,这个不会是你们的练习题吧?你们是一个班的吗?呵呵

呵呵,
感谢 xiuit 这么认真的关注,你再看看那个发帖的人是谁呢!

~_~

#8
purana2007-11-17 21:21
以下是引用robinbest在2007-11-17 21:12:51的发言:

非常感谢 purana,
数据是查出来了,但是出了个很奇怪的问题:
公司表和个人表中有同名字段时,怎么引用?
(你用了个a.字段名、b.字段名 这样就行了,
但奇怪的是我这样用它就显示不出东西了,而用原字段名就可以,
我用a.字段名 as "别名" 也不行,真是见鬼了!

why?

请贴出你是怎么写的..我才知道why.
不然就真的见鬼了.

#9
robinbest2007-11-22 08:41
论坛改版了?

好是好,不过我昨晚发的帖子咋不见了?
#10
robinbest2007-11-22 21:12
原帖由 purana 于 2007-11-17 21:21 发表 [url=http://bbs.bc-cn.net/redirect.php?goto=findpost&pid=1104855&ptid=186773][/url]
以下是引用robinbest在2007-11-17 21:12:51的发言:
非常感谢 purana,数据是查出来了,但是出了个很奇怪的问题:公司表和个人表中有同名字段时,怎么引用?(你用了个a.字段名、b.字段名 这样就行了,但奇怪的是我这样用它就显示 ...



我知道问题出在哪里了:
错误:select a.字段名 as "别名"
正确:select a.字段名 as  别名
为什么?

另外:
select a.中文名称,a.公司地址,b.中文姓名,b.英文姓名,b.性别
from 公司表 a,个人表 b,隶属表 c
where a.公司代码=c.公司代码 and b.个人代码='Z001' and b.个人代码=c.个人代码

这样查出来,如果"Z001"在隶属表中有两条记录,
查出来的记录就会重复2倍,有3条记录,查出来的记录就会重复3倍。
为什么?

Thanks
#11
madpbpl2007-11-23 01:03
楼主,我昨天看了你的贴子的,你把昨天的数据表最好贴出来让大家分析
还有如果要查询多字段,最好不要用distinct,用group by来去掉重复选项。
最好把你的要求也写上,比如表里是怎么样的结构,你希望得到什么样的结果。
#12
purana2007-11-23 11:06
那你就先去掉重复的编号了..
#13
linyesu2007-11-23 11:39
公司表: (公司代码 中文名称 英文名称 公司地址 备注)
个人表: (个人代码 中文姓名 英文姓名 姓别 备注)
隶属表: (公司代码 个人代码)


select  * from (公司表 letf join 隶属表 on 公司表.公司代码=隶属表.公司代码) letf join 个人表 on 隶属表.个人代码=个人表.个人代码 where ...........................
#14
robinbest2007-11-25 10:55
问题解决了.

谢谢:purana, madpbpl , linyesu
1