ASP ACCESS 多表联合查询问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP ACCESS 多表联合查询问题相关的知识,希望对你有一定的参考价值。

数据表:
学生表:学生ID,学生姓名,班级ID
班级表:班级ID,班级名称,教师ID

教师表:教师ID,教师姓名

学生表和班级表是通过班级ID关联的
班级表和教师表是通过教师ID关联的

现在知道学生的ID,怎么获取教师的ID和教师姓名?

ASP代码如下(定义banzhuren函数,传递参数为学生的ID):

<%
'定义banzhuren函数
function banzhuren(stuid)
  dim rs,sql
  set rs =server.CreateObject("adodb.recordset")
  sql="select 教师表.教师姓名,教师表.教师ID from 教师表,班级表,学生表 where 学生表.学生id="&stuid&" and 班级表.班级id=学生表.班级id and 教师表.教师id=班级表.教师id"
  rs.open sql,conn,1,1
  banzhuren=rs("教师姓名")
end function
'调用函数测试输出学生ID为1教师姓名
response.Write(banzhuren(1))
%>

参考技术A 你可以在access的查询功能里面先测试下SQL语句。

select C.教师ID, C.教师姓名 from 学生表 A, 班级表 B, 教师表 C where A.班级ID=B.班级ID and B.教师ID=C.教师ID and A.学生ID=1
参考技术B select 教师ID, 教师姓名
from 学生表,班级表,教师表
where 学生表.学生ID='现在知道学生的ID' and 学生表.班级ID=班级表.班级ID and 班级表.教师ID=教师表.教师ID追问

教师姓名 不能获取到,能否加Q请教?

追答

select 班级表.教师ID, 班级表.教师姓名
from 学生表,班级表,教师表
where 学生表.学生ID='现在知道学生的ID' and 学生表.班级ID=班级表.班级ID and 班级表.教师ID=教师表.教师ID

追问

班级表没有教师姓名,班级表只有教师ID

教师姓名是储存在教师表中

追答

不好意思,一着急打错了
select 教师表.教师ID, 教师表.教师姓名
from 学生表,班级表,教师表
where 学生表.学生ID='现在知道学生的ID' and 学生表.班级ID=班级表.班级ID and 班级表.教师ID=教师表.教师ID

追问

你好先感谢你,但输出的结果为空

追答

学生ID你输入了么?需要换成你的查询条件的,再就是检查一下你的数据库中是否真有对应的数据。
你的结果集中取的列名是“班主任姓名”,所以需要修改列名
select 教师表.教师ID, 教师表.教师姓名 as 班主任姓名
from 学生表,班级表,教师表
where 学生表.学生ID='现在知道学生的ID' and 学生表.班级ID=班级表.班级ID and 班级表.教师ID=教师表.教师ID

追问

学生ID我直接输入存在ID

select 教师表.教师ID, 教师表.教师姓名 as banzhuren
还是不行

追答

你的asp代码是有问题的
你可以在access下验证一下语句是否有结果,然后再调你的页面代码,你的页面代码连循环都美欧,肯定是不对的吧

hibernate实现多表联合查询

以前用sql实现联合查询 是非常简单的事,只需要写sql语句就可以,第一次遇到hibernate要实现多表联合查询的时候还楞了一下。最后看了下资料,才恍然大悟,hibernate实现多表联合查询跟SQL没多大差别。  

    hibernate很多实现都是靠喜欢配关系,但是如果两张表,数据量都非常大的时候,并不合适配关系。

    例如:student表和score表需要做联合查询。

    1)sql: select s.id,s.name,sc.score from student as s,score as sc where s.id = sc.userId;

    (字段都是用的数据库中字段名称)

    2)HQL: select s.id,s.name,sc.score from Student as s,Score as sc where s.id = sc.userId;

    (上面字段都是 javabean的属性)

     如果我们按1)查询的话,必须调用 session.createSQLQuery();方法

     如果按2)查询,还是调用 session.createQuery();

     只是要注意,平时我们查询的时候,例如:“from Student ”查询的结果集 封装的全都是student对象,但是2)执行的结果集里面不是对象,而是一系列数组。需要转换成需要的样式。

下面 是查询的一段代码:

Session session = getHibernateTemplate().getSessionFactory()
   .getCurrentSession();
   StringBuffer sb = new StringBuffer(" select user.username,user.truename,user.sex,user.idnum,user.level,s.sumScore from Score as s,Examuseras user where s.id.userId = user.id ");
   if(score != null){
    if(score.getExamId()!=null && !"".equals(score.getExamId())
      && !"null".equals(score.getExamId())){
     sb.append(" and s.examId =:examId ");
    }
    if(score.getExamPlace()!=null && !"".equals(score.getExamPlace())
      && !"null".equals(score.getExamPlace())){
     sb.append(" and s.examPlace =:examPlace ");
    }
    if(score.getUsername()!=null && !"".equals(score.getUsername())
      && !"null".equals(score.getUsername())){
     sb.append(" and s.username like:username ");
    }
   }
   sb.append(" order by s.sumScore desc ");
   Query q = session.createQuery(sb.toString());
   if(score != null){
    if(score.getExamId()!=null && !"".equals(score.getExamId())
      && !"null".equals(score.getExamId())){
     q.setParameter("examId",score.getExamId());
    }
    if(score.getExamPlace()!=null && !"".equals(score.getExamPlace())
      && !"null".equals(score.getExamPlace())){
     q.setParameter("examPlace",score.getExamPlace());
    }
    if(score.getUsername()!=null && !"".equals(score.getUsername())
      && !"null".equals(score.getUsername())){
     q.setParameter("username","%"+score.getUsername()+"%");
    }
   }
   List list = q.list();

需要将查询的结果集 进行一下转换:

List stuList = scoreService.findAllScore(queryScore, null); // 返回的结果集
   if(stuList != null && stuList.size()>0){
    list = new LinkedList();
    StudentScore st;
    for(int i = 0; i < stuList.size();i++){
     st = new StudentScore();
     Object[] object = (Object[])stuList.get(i);// 每行记录不在是一个对象 而是一个数组
     String userId =  (String)object[0];
     String username =  (String)object[1];
     String truename =  (String)object[2];
     String sex =  (String)object[3];
     String idnum =  (String)object[4];
     String level =  (String)object[5];
     Double sumScore =  Double.parseDouble(String.valueOf(object[6]));
     String paperId =  (String)object[7];
     // 重新封装在一个javabean里面
     st.setUserId(userId);
     st.setUsername(username);
     st.setTruename(truename);
     st.setIdnum(idnum);
     st.setLevel(DictSwitch.getValue("DICT_LEVEL",level));
     st.setSex(DictSwitch.getValue("DICT_SEX",sex));
     st.setPaperId(paperId);
     st.setSumScore(sumScore);
     st.setExamplace(DictSwitch.getValue("DICT_EXAMSTATION",examplace));
     list.add(st); // 最终封装在list中 传到前台。
    }

以上是关于ASP ACCESS 多表联合查询问题的主要内容,如果未能解决你的问题,请参考以下文章

Access的Left join多表联合查询

vb SQL多表联合查询问题(Access数据库表)

Access数据库中多表联合查询,并显示记录

Access select where 数据库查询 多表联合查询

MYSQL 多表联合查询问题

sqlite 多表联合查询