我已经执行了一个代码
SELECT CASE b.ON_LOAN
when 'Y' then
'In Lib'
when 'N' then
(SELECT c.duedate from book_copy a, book b, loan c
where b.isbn = 123456
and a.isbn = b.isbn
and a.book_no = c.book_no)
END AS Availability, a.isbn, a.class_number
FROM book_copy b, book a
where a.isbn = b.isbn and a.isbn = 123456
Run Code Online (Sandbox Code Playgroud)
它返回一个错误,说子查询返回多行.我想获得一本书的可用性.一本书可以有多个副本,由book_no标识.如果副本可用,它应该只返回'在lib',否则,来自贷款表的duedate.例如,如果一本书有三个副本,2个和1个在lib中,我希望我的查询显示所有三个副本.我想我错过了一个外连接.你能澄清一下吗?
我用这个的表是
book_copy: book_no, isbn, on_loan
loan: student_id, book_no, duedate,datereturned,loan_id
fk: book_no with book_no in book_copy
book: isbn (pk), title, class
Run Code Online (Sandbox Code Playgroud)
谢谢,rk
Rob*_*ley 10
问题在于:
(SELECT c.duedate from book_copy a, book b, loan c where b.isbn = 123456 and a.isbn = b.isbn and a.book_no = c.book_no)
Run Code Online (Sandbox Code Playgroud)
实际上你只想要贷款表,但是使用MAX来确保它只返回一行.
(SELECT MAX(c.duedate) from loan c where a.book_no = c.book_no)
Run Code Online (Sandbox Code Playgroud)
所以...你可以在外部查询中挂钩表 - 不需要再次使用a和b.
抢