博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一对多的两个表,查询主表的信息和主表在子表中的记录条数
阅读量:7093 次
发布时间:2019-06-28

本文共 691 字,大约阅读时间需要 2 分钟。

hot3.png

看标题可能看的不明白。举例子来说

A表是班级表,字段:ID=班级编号,Name=班级名字

B表是学生表,字段:ID=班级编号,SID= 学生编号。

 

就是查询班级表的全部信息,然后也要查询出来班级表对应的学生数量。在群里问问,总结有两个比较简单,清晰的方法

第一个方法(城主):

select a.*, (select count(*) from b where b.ID=a.id) as 学生数量 from a

这个看着比较清楚简单,

 

第二个方法(泪吻星痕):

select a.*, xx.人数from a, (select b.ID, count(ID) as 人数 from b group by b.ID) xxwhere a.ID = xx.ID

这个方法用到一个临时表,相当于是先构造一个临时表,然后用班 级表A和临时表做关联

 

泪吻星痕推荐使用第二个方法,理由是关联查询快,他也做过测试。我目前忙项目,自己还没有测试比较两个性能

 

但是其实两个sql查询的结果是不一样的

使用第一个方法,

查询出来班级信息和班级对应的学生数量。即使学生数量是0也是有班级信息的记录

第二个方法确如果学生数量为0的话,就不会显示对应的班级信息。

不过这个是小问题只要修改join关系就可以

select a.*,xx.人数from a left join (select b.ID,count(ID) as 人数 from b group by b.ID) xxon a.ID = xx.ID

 

转载于:https://my.oschina.net/u/178116/blog/741384

你可能感兴趣的文章
poj1221
查看>>
table固定宽度高度, 及overflow省略号
查看>>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xbb in position 51: ord
查看>>
用命令编译
查看>>
Python--day70--ORM查询练习
查看>>
2017年CCF大数据与计算智能大赛,梳理总结新鲜出炉啦~~~
查看>>
[转] 使用Spring Boot和Gradle创建项目
查看>>
[重要]虚拟目录下的路径
查看>>
Intermec判断文本框内录入的字符是否为回车
查看>>
React-Native 常用组件学习资料链接
查看>>
ASP.NET MVC关于Ajax以及Jquery的无限级联动
查看>>
【转】8086内部结构及原理
查看>>
MySQL--5--subquery和连接
查看>>
页面滚动条 全局样式设置
查看>>
v-if v-else-if v-else
查看>>
掌握Thinkphp3.2.0----CURD
查看>>
子表,父表;一对多,多对一;主键,外键梳理。
查看>>
Codeforces 533B Work Group
查看>>
pymysql查看、更新数据库
查看>>
UVA1479 Graph and Queries
查看>>