问题最终要求的结果是这样的

是不是很简单?
然而,数据库是这样式的

忽略续借操作,只关注借书、还书操作。

就是说同一张表,同一本书,既可以存借书,也可以存归还,而且同一本书还可能借出或者归还多次。
其他属性好说,比较麻烦的就是这个归还时间,同一本书,紧跟着借书操作的还书操作,才是它的归还时间。
解决方案是这样的:
把借出操作记为A表,归还操作记为B表:其中A表22行,B表19行

华友协同办公管理系统(华友OA),基于微软最新的.net 2.0平台和SQL Server数据库,集成强大的Ajax技术,采用多层分布式架构,实现统一办公平台,功能强大、价格便宜,是适用于企事业单位的通用型网络协同办公系统。 系统秉承协同办公的思想,集成即时通讯、日记管理、通知管理、邮件管理、新闻、考勤管理、短信管理、个人文件柜、日程安排、工作计划、工作日清、通讯录、公文流转、论坛、在线调查、
0
连接条件应当为藏书的编号和读者的id ,连接的结果为58行。由于数据中,同一本书名有好几个编号,我把书名给去掉了,连接的结果是这样的

可以看出如果上的记录框图框出来的就是问题的所在!框图框出来的都是同一条借书记录,它跟每一条的还书记录连接。从记录里可以看出,我让这个人借了六次同一本书,做了六次的连接!
以下规则可以帮助我们查询出正确的结果
1)同一组借还操作,借操作一定在还操作之前
2)排除掉借操作时间>还操作的时间的记录之后,最早的还书时间,就是这个人,这本书的还书时间
最终结果是这样的
最终SQL代码是这样的
select A.*,min(B.操作时间) 还书时间 from aleft join bon a.书籍的典藏编号 = b.书籍的典藏编号 and a.读者id = b.读者id and a.操作时间<b.操作时间group by a.书籍的典藏编号,a.操作名称,a.操作时间,a.读者id

用的是左外连接,未归还的还书时间当然就是NULL啦。这样,其他的子查询、联合、分页都不是问题了。
以上就是一个关于数据库的联合查询的实例的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号