| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 907 人关注过本帖
标题:突然碰到的的问题
只看楼主 加入收藏
javaxingxing
Rank: 2
等 级:论坛游民
帖 子:78
专家分:82
注 册:2009-11-6
结帖率:93.33%
收藏
已结贴  问题点数:10 回复次数:13 
突然碰到的的问题
今天在百度上瞎逛  看到一个以前提问者的问题
我突然也想到个问题

举个例子吧
person表
id name  compid  addrid  codeid
comp表
id compname
addr表
id addrname
code表
id codename


我的意思是通过怎么一个sql语句查询显示如下

202  达赖喇嘛傻子   达赖喇嘛傻子制造公司   中国西藏   110110

搞不清怎么才能实现这个功能
left join  on 好像只能两个表
union吧   好像也行不通,恳请大家帮帮忙……
搜索更多相关主题的帖子: 公司 西藏 sql语句 百度 中国 
2010-03-01 19:06
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:5 
join完全可以的,谁说只能两个表,10表也没问题的(只要你不怕繁)!

★★★★★为人民服务★★★★★
2010-03-02 08:17
javaxingxing
Rank: 2
等 级:论坛游民
帖 子:78
专家分:82
注 册:2009-11-6
收藏
得分:0 
我写一个sql语句,你看一下对不对

sql="select a.id,a.name,,c.addrname,d.codename from person as a inner join comp as b on

inner join addr as c on a.addrid=c.id inner join code as d on a.codeid=d.id"

我在网上搜了一下,基本上都是用两个表来举例子
2010-03-02 09:54
javaxingxing
Rank: 2
等 级:论坛游民
帖 子:78
专家分:82
注 册:2009-11-6
收藏
得分:0 
怎么不说了,
我写的对不对啊,改怎么写呢……
2010-03-02 17:34
hmhz
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:30
帖 子:1890
专家分:503
注 册:2006-12-17
收藏
得分:5 
楼上的写法是关联,需要每个表之间都要多几个字段放前一个表的ID才能使用关联语句来关联起来一次性把数据读出来

所以你的表结构不正确无法使用关联起到效果

[编程论坛] ASP超级群:49158383  敲门暗号:ASP编程
龍艺博客 http://www.
2010-03-02 17:49
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
回复 3楼 javaxingxing
你写的没有什么大问题!可以自己试一试的啊!当然你写的可能得不到你想要的结果,因为全部用inner join 有的结果会出不来!

[ 本帖最后由 cnfarer 于 2010-3-2 19:29 编辑 ]

★★★★★为人民服务★★★★★
2010-03-02 18:31
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
这是我给你测试,写了2个查询语句,其结果的在有些情况下是一样的,有些情况下是不同的

程序代码:
create table person(id int,name char(10),compid int,addrid int,codeid int)
create table comp (id int, compname char(20))
create table addr (id int, addrname char(20))
create table code (id int, codename char(20))
go
insert into person values(1,'a',1,1,1)
insert into person values(2,'b',1,1,1)
insert into person values(3,'c',1,1,2)
insert into person values(4,'d',2,2,2)
insert into comp values(1,'acomp')
insert into comp values(2,'bcomp')
insert into addr values(1,'addra')
insert into addr values(2,'bddra')
insert into code values(1,'acode')
--insert into code values(2,'bcode')  --如果执行这一行,两个查询结果就一样,否则就不同
go
select a.id,a.name,,c.addrname,d.codename from ((person as a inner join comp as b on )
inner join addr as c on a.addrid=c.id) inner join code as d on a.codeid=d.id
select a.id,a.name,,c.addrname,d.codename from ((person as a left outer join comp as b on )
left outer join addr as c on a.addrid=c.id) left outer join code as d on a.codeid=d.id

★★★★★为人民服务★★★★★
2010-03-02 19:36
javaxingxing
Rank: 2
等 级:论坛游民
帖 子:78
专家分:82
注 册:2009-11-6
收藏
得分:0 
谢谢cnfarer花时间给我测试
不过你说的那2个sql语句确实结果不一样
第一句是找匹配的,有没有code表里面有没有bcode没影响,有就显示,没有就不显示
第二句是左外连接,有bcode那么和第一个sql语句查询结果一样,没有bcode他也显示,只不过对应的bcode是null

不知道我说的对不对?

感觉5楼说的有道理
就是我的这个表就有点问题
打个比方:
person表应该是用户注册时填写的,那么公司名称,地址,邮编都是自己填写的,而不是从数据库中某一个表中读出来,让用户去选择;
所以表本身有问题……

其实我发这个贴的目的主要是体会一下
关联的多个表之间怎么查询  就是类似inner join     /  left join

[ 本帖最后由 javaxingxing 于 2010-3-3 09:34 编辑 ]
2010-03-03 09:31
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
回复 8楼 javaxingxing
不同用途,使用不同的设计。其实你的表,从关系规范化角度来讲,更好一些!

用户注册谁会真实的写公司、地址啊,如果用于业务往来,一个公司就可能有多个业务员。一个公司也可能使用不同的地址。所以你的表应该更灵活!
addr code这两个表,如果code是邮编的话应该合并


我的测试就说明了5楼的说法是对还是。。。

[ 本帖最后由 cnfarer 于 2010-3-3 11:00 编辑 ]

★★★★★为人民服务★★★★★
2010-03-03 10:52
javaxingxing
Rank: 2
等 级:论坛游民
帖 子:78
专家分:82
注 册:2009-11-6
收藏
得分:0 

明白了   知道多个表关联的时候
 sql语句 里面注意   from后面的那些括号
2010-03-03 21:26
快速回复:突然碰到的的问题
数据加载中...
 
   



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

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