最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

一个关于数据库的联合查询的实例

来源:动视网 责编:小采 时间:2020-11-09 08:46:09
文档

一个关于数据库的联合查询的实例

一个关于数据库的联合查询的实例:问题最终要求的结果是这样的 是不是很简单?然而,数据库是这样式的忽略续借操作,只关注借书、还书操作。就是说同一张表,同一本书,既可以存借书,也可以存归还,而且同一本书还可能借出或者归还多次。其他属性好说,比较麻烦的就是这个归还时间,同一本书
推荐度:
导读一个关于数据库的联合查询的实例:问题最终要求的结果是这样的 是不是很简单?然而,数据库是这样式的忽略续借操作,只关注借书、还书操作。就是说同一张表,同一本书,既可以存借书,也可以存归还,而且同一本书还可能借出或者归还多次。其他属性好说,比较麻烦的就是这个归还时间,同一本书
 问题最终要求的结果是这样的

是不是很简单?

然而,数据库是这样式的

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

就是说同一张表,同一本书,既可以存借书,也可以存归还,而且同一本书还可能借出或者归还多次。

其他属性好说,比较麻烦的就是这个归还时间,同一本书,紧跟着借书操作的还书操作,才是它的归还时间。

解决方案是这样的:

把借出操作记为A表,归还操作记为B表:其中A表22行,B表19行

连接条件应当为藏书的编号和读者的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啦。这样,其他的子查询、联合、分页都不是问题了。

文档

一个关于数据库的联合查询的实例

一个关于数据库的联合查询的实例:问题最终要求的结果是这样的 是不是很简单?然而,数据库是这样式的忽略续借操作,只关注借书、还书操作。就是说同一张表,同一本书,既可以存借书,也可以存归还,而且同一本书还可能借出或者归还多次。其他属性好说,比较麻烦的就是这个归还时间,同一本书
推荐度:
标签: 查询 联合 数据库
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top