2012-10-13 23 views
2

我需要編寫一個mySQL語句來僅返回尚未出租的項目(書籍)。在那一刻我有這個,但我知道這是不對的: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) 
+0

當一本書從租用中返回時,它會從「租賃」表中刪除嗎? – Taryn

回答

0

使用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 
0

該查詢將首先得到book_id和數量的副本租用,然後加入書本表,查看副本數量是否大於租用副本,並打印所有此類書籍和可用副本數量。

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