一个比较复杂的层次查询
现在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查询预借权限表才能查到预借有效期,查到的预借有效期还要嵌进上面的条件。到底应该怎么做呢?
------解决方案--------------------create or replace view temp
as
SELECT a.bookid,a.bookname,c.userid,d.preborrowpermissionid,(trunc(sysdate)-trunc(b.preborrowdate)) d,
d.preborrowtime E
FROM T_BOOKINFO a
left join t_preborrowinfo b
on a.bookid=b.bookid
left join t_userinfo c
on b.userid=c.userid
left join t_preborrowpermission d
on c.user_borrowpermission=d.preborrowpermissionid
select t.* from temp t where t.d <t.E