子查询返回多行SQL

2 sql t-sql subquery

我已经执行了一个代码

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.