• ADADADADAD

    数据库中联合查询的示例[ mysql数据库 ]

    mysql数据库 时间:2024-11-29 09:50:42

    作者:文/会员上传

    简介:

    问题最终要求的结果是这样的是不是很简单?然而,数据库是这样式的忽略续借操作,只关注借书、还书操作。就是说同一张表,同一本书,既可以存借书,也可以存归还,而且同一本书还可能借出

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

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

    是不是很简单?

    然而,数据库是这样式的

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

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

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

    解决方案是这样的:

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

    连接条件应当为藏书的编号和读者的id ,连接的结果为58行。由于数据中,同一本书名有好几个编号,我把书名给去掉了,连接的结果是这样的

    可以看出如果上的记录框图框出来的就是问题的所在!框图框出来的都是同一条借书记录,它跟每一条的还书记录连接。从记录里可以看出,我让这个人借了六次同一本书,做了六次的连接!

    以下规则可以帮助我们查询出正确的结果

    1)同一组借还操作,借操作一定在还操作之前

    2)排除掉借操作时间>还操作的时间的记录之后,最早的还书时间,就是这个人,这本书的还书时间

    最终结果是这样的

    最终SQL代码是这样的

    selectA.*,min(B.操作时间)还书时间fromaleftjoinbona.书籍的典藏编号=b.书籍的典藏编号anda.读者id=b.读者idanda.操作时间<b.操作时间groupbya.书籍的典藏编号,a.操作名称,a.操作时间,a.读者id

    用的是左外连接,未归还的还书时间当然就是NULL啦。这样,其他的子查询、联合、分页都不是问题了。

    数据库中联合查询的示例.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: 数据库联合查询