免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1855 | 回复: 1
打印 上一主题 下一主题

一个比较复杂的层次查询 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-23 10:15 |只看该作者 |倒序浏览
现在oracle数据库有4个表。
用户信息表T_UserInfo,字段如下:
userid --用户id
user_BorrowPermission --用户的预借权限,是预借权限表的id的外键

预借权限表T_PreBorrowPermission,字段如下:

PreBorrowPermissionID --ID值
PreBorrowTime --预借有效期

预借信息表T_PreBorrowInfo,字段如下:
ID --信息id
userID --用户ID(即预借人id)
PreBorrowDate --预借日期
BookID --所借的图书的id

图书信息表T_BookInfo,字段如下:
BookID
BookName --图书名称

现在我要查询所有还没有过预借有效期的图书名称(根据预借信息表),其中一个查询条件是肯定是
trunc(sysdate)- trunc(to_date(PreborrowDate)) between 0 and 预借有效期。
但是预借有效期是比较复杂,首先查询预借信息表,获取用户id,然后根据用户id查询用户信息表它的预借权限id,再根据预借权限id查询预借权限表才能查到预借有效期,查到的预借有效期还要嵌进上面的条件。到底应该怎么做呢?

论坛徽章:
0
2 [报告]
发表于 2007-07-23 13:05 |只看该作者
SELECT distinct bookname
  FROM t_bookinfo td
WHERE EXISTS (
          SELECT 'x'
            FROM t_userinfo ta, t_preborrowinfo tb, t_preborrowpermission tc
           WHERE tb.bookid = td.bookid
             AND ta.user_borrowpermission = tc.preborrowpermissionid
             AND ta.userid = tb.userid
             AND (TRUNC (SYSDATE) - TRUNC (TO_DATE (tb.preborrowdate))) BETWEEN 0
                                                                          AND tc.preborrowtime)

没有考虑优化和索引和其他事项,只是为了实现功能,未经测试。

[ 本帖最后由 numenhuang 于 2007-7-23 13:07 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP