日期:2014-05-17  浏览次数:20918 次

请教一个问题,望有经验的大哥能给点意见,先谢过了
有3张表
第一张UsrInfo     字段:UsrID(自动编号)   UsrName  
第二张表UsrAccount   ID(自动编号)   UsrName   Usrstar
第三张表UsrStar     ID(自动编号)   UsrName   BookID

需求:

通过用户UsrID取得用户UsrName
然后通过UsrName   从第二张表和第三张表中取得用户的相关数据
将其数据显示出来

问题是再第二张和第三张表中,不是一定存在第一张表中UsrName的数据

我没有这方面的经验,是这样做的,但行不通

一、使用内联   inner   join查询,但在第二和第三张表中不是一定有符合第一张表中的UsrName的记录,所以查询出错

二、建立三个记录集对象RS1   Rs2   Rs3
其对应sql1   sql2   sql3
sql1= "select   *   from   UsrInfo   where   UsrID= "&UsrID

sql2= "select   *   from   UsrAccount   where   UsrName= "&Rs1( "UsrName ")

sql3= "select   *   from   UsrStar   where   UsrName= "&Rs1( "UsrName ")

那里出错了

有更好的思路吗?
谢谢各位大大了


------解决方案--------------------
1. "使用内联 inner join查询,但在第二和第三张表中不是一定有符合第一张表中的UsrName的记录 "

应该用[left|right|full] Outer join 方式;

2.建一个RS即可:
Select * From [UsrInfo] a Left outer join [UsrAccount] b on a.UsrName=b.UsrName Left outer join [UsrStar] c on a.UsrName=c.UsrName Where a.UsrID=1
------解决方案--------------------
left join
------解决方案--------------------
是的,left join 就是的。
第一张表是主表
------解决方案--------------------
Select * From [UsrInfo] a Left join [UsrAccount] b on a.UsrName=b.UsrName Left join [UsrStar] c on a.UsrName=c.UsrName
------解决方案--------------------
你的语句写错了

应该如下:

sql= "select DI.UserName,DI.LoginTimes,DI.TeacherID,DI.RealName,DI.gender,DI.mail,DI.QQ,DI.telphone,DI.mobile,DI.address3,DI.PostCode,DI.DOKLock,DI.Authentication,DI.UserGroup,DI.UserMoney,DI.UserExper,DI.LoginTime,DI.LastIP,DI.content from [DOKInfo] DI left join [Fund] FD on DI.UserName=FD.UserName left join [prestige] PE on DI.UserName=PE.UserName where DI.TeacherID= "&userid


多了一个DI.DOKLock

还有一点需要注意,如果你使用的是access数据库

还应该使用()给sql语句分段

access中的写法

sql= "select DI.UserName,DI.LoginTimes,DI.TeacherID,DI.RealName,DI.gender,DI.mail,DI.QQ,DI.telphone,DI.mobile,DI.address3,DI.PostCode,DI.DOKLock,DI.Authentication,DI.UserGroup,DI.UserMoney,DI.UserExper,DI.LoginTime,DI.LastIP,DI.content from (([DOKInfo] DI left outer join [Fund] FD on DI.UserName=FD.UserName) left outer join [prestige] Pse on DI.UserName=pse.UserName) where DI.TeacherID= "&userid


------解决方案--------------------
Select * From ([UsrInfo] a Left outer join [UsrAccount] b on a.UsrName=b.UsrName) Left outer join [UsrStar] c on a.UsrName=c.UsrName Where a.UsrID=1