sql 一对多的查询

Posted

tags:

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

主表和重表是一对多关系,由一个字段产生对应关系。现在要查出两个表的数据在一个结果集中,但是重表只要最后一条记录。
主表
ID 姓名
1 张三
2 李四
从表:
ID 成绩 时间
1 90 2010-1-20
1 85 2010-2-20
1 92 2010-3-20
2 70 2010-1-20
2 83 2010-2-20
2 90 2010-3-20
现在要达到结果集的效果是这样的
ID 姓名 成绩 时间
1 张洋 92 2010-3-20
2 李四 90 2010-3-20

如何写这个 sql 语句?

你怎么俩table1,后一个叫table2吧

 

执行以下语句

select t1.考试学号,t1.科目,t2.考试成绩
from
(select a.科目,a.科目ID,b.考试学号
from
(select 科目,科目ID from table1) as a,
(select distinct 考试学号 from table2) as b) as t1 left join
table2 as t2 on t1.科目ID=t2.科目ID and t1.考试学号=t2.考试学号

 

结果截图

 

下边还有几条没显示全,凑合看吧

参考技术A 好几种写法,我这里就写一个算抛砖引玉吧,也算给你一个提示。
select name from a where id in (select c.aid from c where bin in (select id from b where job in ('q','r')))
也可以直接关联到c表然后相等,这个办法应该不错,可以直接对应。
参考技术B select 主表.ID ,姓名,成绩,(MAX)时间 from 主表 left join 从表 on 主表.ID=从表.ID 参考技术C 在学生表中加一个学号作为学生的唯一标示吧,不然有同名的。

中成绩表中也添加这个学生唯一标示的关联。
student表:stuNo,name,classNo
score表:stuNo,score
SELECT st.classNo cs,AVG(sc.score) avs FROM student st JOIN score sc ON st.stuNo=sc.stuNo GROUP BY st.classNo ORDER BY avs DESC;
参考技术D 小朋友,你的提问很整齐,也很到位,一目了然
下面是解答

select a.学号,a.姓名,a.性别,b.科目,b.成绩
from 总表 a inner join 分表 b on a.学号=b.学号

DataGridView是不能跨行的,得用别的控件,推荐devexpress的控件,不过你连这个SQL都不会写,要用那个公司的控件,记得得下点功夫。

sqlserver查询一对多的关系、合并多条记录的某字段值到一个字段

参考技术A 现有如下两个表格construct和attachment,通过construct.id = attachment.link_id进行关联。

现需要从attachment表提取每一个construct对应的多个file_path值,并与construct合并。

通过stuff()、 for xml path() 进行拼接,直接上sql语句:

查询结果为:

以上是关于sql 一对多的查询的主要内容,如果未能解决你的问题,请参考以下文章

mybatis的动态sql编写以及一对一关系查询和一对多的查询

sql一对多的查询代码怎么查?

简单的一对多的sql查询

MyBatis总结之高级映射一对多查询

MyBatis学习09高级映射之一对多查询

mybatis中的一对多的查询