多表查询问题,急!~~~~~~~~~~~

china165 2004-01-26 10:53:51
二张表
打个比方:
第一张表记录了注册用户

第二张表记录了注册用户的教育经历.所以这张表时记录了,从小学到大学的经历,小学到大学有一个字段int类型的值控制着,由小到大.

我要取其中一位用户的最高学历.

表A
name 用户ID
password 用户密码
atime 记录时间
表A中的用户是唯一的

表B
name 用户ID
school 学校
grade 学历
btime 记录时间

表B中可以记录此用户的多条资料。

但组合后,我要得到用户学历最高的一条记录。

...全文
63 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
china165 2004-01-27
  • 打赏
  • 举报
回复
结贴
Ellen1124 2004-01-27
  • 打赏
  • 举报
回复
SELECT TOP 1 *
FROM B INNER JOIN
A ON A.NAME= B.NAME
ORDER BY B.GRADE DESC
china165 2004-01-27
  • 打赏
  • 举报
回复
TTT
china165 2004-01-27
  • 打赏
  • 举报
回复
把所有的B.other_spe去掉,

b表应建立一个唯一标识ID

不懂,为什么要去掉呀? 这也是我B表中一个字段,我取出来要用的呀.

怎么为B表建立一个唯一的标识?
b.name?
  • 打赏
  • 举报
回复
把所有的B.other_spe去掉,

b表应建立一个唯一标识ID
china165 2004-01-27
  • 打赏
  • 举报
回复
现在的查询到的结果图:http://bbs.sun165.com/UploadFile/2004-1/200412716572450090.gif
china165 2004-01-27
  • 打赏
  • 举报
回复
sql="select top 1000 A.MemberType,A.Title,A.P_yy,A.dress1,A.dress2,A.job_year,A.shieldoractive,A.careertime,max(grade) as degree,B.name,B.school as gdschool,C.positionSeeking1 as seeking,C.postime,B.other_spe from B inner join(A left join C on A.name=C.name) on B.name=A.name"
sql=sql&"GROUP BY school,B.name,A.MemberType,A.Title,A.P_yy,A.dress1,A.dress2,A.job_year,A.shieldoractive,A.careertime,C.positionSeeking1,C.postime,B.other_spe"

大家帮我查查,我查出来的记录,也就是根据表B中的记录进行了重复
china165 2004-01-27
  • 打赏
  • 举报
回复
sql="select top 1000 A.MemberType,A.Title,A.P_yy,A.dress1,A.dress2,A.job_year,A.shieldoractive,A.careertime,max(grade) as degree,B.name,B.school as gdschool,C.positionSeeking1 as seeking,C.postime,B.other_spe from B inner join(A left join C on A.name=C.name) on B.name=A.name"
sql=sql&"GROUP BY school,B.name,A.MemberType,A.Title,A.P_yy,A.degree,A.gdschool,A.degreetxt,A.dress1,A.dress2,A.job_year,A.shieldoractive,A.careertime,C.positionSeeking1,C.postime,B.other_spe"

大家帮我查查,我查出来的记录,也就是根据表B中的记录进行了重复,B中有几条记录,那么读出来的也有几条,似乎这个MAX没起到作用。
  • 打赏
  • 举报
回复
select password, atime, B.name, Max(grade),C.name,C.address,C.mail from B inner join (A left join C on A.name = C.name) on B.name=A.name group by B.name, password, atime, C.name, C.address, C.mail

b表应建立唯一标识
TrueAndFalse 2004-01-27
  • 打赏
  • 举报
回复
select a.* b.school,b.max(grade),b.btime from 表A a,表B b where a.name=b.name
china165 2004-01-27
  • 打赏
  • 举报
回复
提示:列前缀 'C' 与查询中所用的表名或别名不匹配。
china165 2004-01-27
  • 打赏
  • 举报
回复
怎么还没结掉? 怪了.

再问一下,再加个表C,记录了用户的联系信息
C
name 用户名
address 地址
mail 邮箱

select password, atime, B.name, Max(grade),C.name,C.address,C.mail from B inner join A on B.name = A.name and A.name=C.name group by B.name, password, atime,mail,address
是不是这样?还是怎么搞?

我怎么搞出来是错的.
  • 打赏
  • 举报
回复
select password, atime, B.name, Max(grade) from B inner join A on B.name = A.name group by B.name, password, atime
  • 打赏
  • 举报
回复
select password, atime, B.name, Max(grade) from B inner A on B.name = A.name group by B.name, password, atime

B表的数据没能全查出
china165 2004-01-26
  • 打赏
  • 举报
回复
因为表A里现还有这个用户其他的信息,在查询时都要取出来,同时要取出表B中此用户学历最高时的学校及专业内容等.
表B中存了好几条单一用户的记录,从小学到大学,我现在要从表B中得到大学的结果,当然学历从高到小的了,不一定是大学.,也有可能是硕士.

我是查询时用到,不是只选一条记录,我是选很多用户,然后每位用户对应一个最高的学历

学历grade从1-8排列
DeliverGuy 2004-01-26
  • 打赏
  • 举报
回复
观注
billy36 2004-01-26
  • 打赏
  • 举报
回复
你是说获得某一个用的的最高学历呢还是所有用户的最高学历呢还是所有用户的,没明白?
我觉得都不用组合查询就能得到结果啊
某一用户的就直接用上面的一句就行啊
select top 1 name ,school,grade,btime from tableB where name='aaa' order by grade desc
所有用户的就简单了把 where name='aaa' 去了就行
select top 1 name ,school,grade,btime from tableB order by grade desc
如果想取出所有的用户的最高学历简单的办法就是直接用表A的用户做一个循环
  • 打赏
  • 举报
回复
有些没看明白,一条记录???

select top 1 name ,school,grade,btime from tableB where name='aaa' order by grade desc
TrueAndFalse 2004-01-26
  • 打赏
  • 举报
回复
你的学历字段应该有一定的格式控制吧,要是没有的话,就只能在结果中判断了
zhgroup 2004-01-26
  • 打赏
  • 举报
回复
可以通过两个用户ID字段将两个表相关连。

28,406

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧