现在我使用C#编一个图书管理系统,后台数据库采用Oracle10g。数据库的各表简要如下:图书信息表:BookInfo
BookID
BookName    --书名杂志信息表:MagazineInfo
MagaID
MagaName    --杂志名用户信息表:UserInfo
UserID
UserName  --用户名图书借阅纪录表:BookBorrowInfo
BookBorrowID
Borrow_BookID   --所借的书的ID号
Borrow_UserID   --借出用户的ID号
Borrow_Date     --借出日期
Return_Date     --归还日期杂志借阅记录表:MagaBorrowInfo
MagaBorrowID
Borrow_MagaID   --所借的杂志的ID号
Borrow_UserID   --借出用户的ID号
Borrow_Date     --借出日期
Return_Date     --归还日期现在我遇到一个比较复杂的多表查询的问题:就是我要查一个用户的所有借阅纪录(无论是借图书还是借杂志的),查询结果集只包含三个字段:所借的图书或杂志名,借出日期,归还日期。于是我写了一条查询语句(这里我指定用户id为1,表空间为intel)select BookName,MagaName,BookInfo.Borrow_Date,BookInfo.Return_Date,MagaBorrowInfo.Borrow_Date,MagaBorrowInfo.Return_Date from intel.BookInfo,intel.MagazineInfo,intel.BookBorrowInfo,intel.MagaBorrowInfo where (intel.BookInfo.BookID = intel.BookBorrowInfo.Borrow_BookID and 
intel.BookInfo.Borrow_UserID=1) OR (intel.MagazineInfo.MagaID= intel.MagaBorrowInfo.Borrow_MagaID and 
intel.MagaBorrowInfo.Borrow_UserID=1);  我把这个查询语句放在SQL*PLUS上运行,错误是:未选选定行。这个查询语句到底该怎么写呢?

解决方案 »

  1.   

    select magName,Borrow_Date,Return_Date
    from MagazineInfo inner join MagaBorrowInfo on Borrow_MagaID=MagaID
    where Borrow_UserID=1
    union
    select BookName,Borrow_Date,Return_Date
    from BookBorrowInfo inner join BookBorrowInfo on Borrow_BookID=BookID
    where Borrow_UserID=1
      

  2.   

    不好意思,第二个连接中把一个bookBorrowInfo换成BookInfo
      

  3.   

    select a.UserName,t1.BookName,t1.Borrow_Date,t1.Return_Date,
    t2.MagaName,t2.Borrow_Date,t2.Return_Date
    from intel.UserInfo a,
    (select * from intel.BookBorrowInfo b,intel.BookInfo c
    where  b.Borrow_BookID=c.BookID) t1,
    (select * from intel.MagaBorrowInfo d,intel.MagazineInfo e
    where d.Borrow_magaID=e.MagaID ) t2
    where a.UserId=t1.Borrow_UserID(+) and a.UserID=t2.Borrow_UserID(+)
    去掉圖書和雜志者為空的記錄
      

  4.   

    select bookname v_name, b.borrow_date v_sdate,b.return_date v_rdate 
    from BookBorrowInfo b,UserInfo,BookInfo where userid=b.Borrow_UserID and BookID=b.Borrow_BookID
    union
    select MagaName v_name, a.Borrow_Date v_sdate,a.Return_Date v_rdate 
    from MagaBorrowInfo a,UserInfo,MagazineInfo where userid=a.Borrow_UserID and MagaID=Borrow_MagaID
      

  5.   

    select 'BOOK',  bi.BookName, bb.Borrow_Date, bb.Return_Date
    from intel.BookInfo bi, intel.BookBorrowInfo bb
    where bi.BookID = bb.Borrow_BookID 
      and bb.Borrow_UserID = 1
    union
    select 'Magazine',  mi.BookName, mb.Borrow_Date, mb.Return_Date
    from intel.MagazineInfo mi, intel.MagaBorrowInfo mb
    where mi.BookID = mb.Borrow_BookID 
      and mb.Borrow_UserID = 1
      

  6.   

    楼主写的很不对。
    杂志和书的借阅难道是一一对应的?要不怎么可以直接写在一个select中呢即使结果出来了也使有很多重复记录的!!
      

  7.   

    学习一下
    同意 malligator(十步之内没有我的爱人)
      

  8.   

    quote:你这两个借阅纪录表里并没有关联用户ID啊,怎么根据用户查询他的借阅纪录呢?? 图书借阅纪录表:BookBorrowInfo
    BookBorrowID
    Borrow_BookID   --所借的书的ID号
    Borrow_UserID   --借出用户的ID号   这个不是吗?
    Borrow_Date     --借出日期
    Return_Date     --归还日期杂志借阅记录表:MagaBorrowInfo
    MagaBorrowID
    Borrow_MagaID   --所借的杂志的ID号
    Borrow_UserID   --借出用户的ID号    这个不是吗?
    Borrow_Date     --借出日期
    Return_Date     --归还日期