请教一个问题,望有经验的大哥能给点意见,先谢过了
有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