任何人都可以提出更好的解决方案吗?
SELECT TITLE,BOR_NAME,BOR_ADDRESS FROM BOOK,BORROWER
WHERE BOOKID IN
(SELECT BOOKID
FROM BOOK_LOANS
WHERE BRANCHID IN
(SELECT BRANCHID
FROM LIBRARY_BRANCH
WHERE BRANCH_NAME='SHARPSTOWN'))
AND CARDNO IN
(SELECT CARDNO
FROM BOOK_LOANS
WHERE DUEDATE=to_date(sysdate));
任何帮助?
答案 0 :(得分:0)
您可以使用JOIN
将子选择包含在FROM部分中e.g。这样
SELECT TITLE,BOR_NAME,BOR_ADDRESS
FROM
BOOK JOIN BOOK_LOANS ON BOOK.CARDNO =BOOK_LOANS.CARDNO AND BOOK_LOANS.DUEDATE=to_date(sysdate)
,BORROWER
WHERE BOOKID IN (SELECT BOOKID FROM BOOK_LOANS WHERE BRANCHID IN (SELECT BRANCHID FROM LIBRARY_BRANCH WHERE BRANCH_NAME='SHARPSTOWN'))
;
与另一个更大的子选择同样的事情
答案 1 :(得分:0)
你可以写成:
SELECT BK.TITLE,
BRR.BOR_NAME,
BRR.BOR_ADDRESS
FROM BORROWER BRR
left join BOOK_LOANS BL on BL.CARDNO = BRR.CARDNO
left join BOOK BK on BK.BOOKID = BL.BOOKID
left join LIBRARY_BRANCH LB on LB.BRANCHID = BL.BRANCHID
where BL.DUEDATE = to_date(sysdate)
and LB.BRANCH_NAME='SHARPSTOWN';
答案 2 :(得分:0)
select b.title, bor.bor_name, bor.bor_address
from book b,
borrower bor,
book_loans bl,
library_banch lib,
where b.book_id = bl.book_id
and b.cardno = bor.cardno
and bl.branch_id = lib.branch_id
and lib.branch_name ='SHARPSTOWN'
and bl.duedate = to_date(sysdate);