2

我需要编写一个 mySQL 语句来仅返回尚未租用的物品(书籍)。我有这个但我知道这是不对的那一刻:

SELECT books.copies 
FROM books 
WHERE books.copies > (SELECT rentals.book_id, COUNT(rentals.book_id) As CountRentals 
                        FROM rentals 
                        WHERE rentals.book_id = books.id )
4

2 回答 2

0

使用 a获取表left join中没有条目的所有内容rentals

SELECT b.copies 
FROM books b
LEFT OUTER JOIN rentals r ON r.book_id = b.id
WHERE r.book_id IS NULL
于 2012-10-13T12:02:01.107 回答
0

该查询首先会获取 book_id 和租借的副本数,然后与 books 表连接以查看副本数是否大于租借副本,并打印所有此类书籍和可用副本数。

SELECT 
    b.id, b.copies - r.rentalCount
FROM 
    books b
    JOIN (
           SELECT book_id, count(*) rentalCount) 
           FROM rentals 
           GROUP BY book_id
         ) as r
    ON b.book_id = r.book_id
WHERE 
    b.copies > r.rentalCount
于 2012-10-13T12:03:31.750 回答