在这方面遇到了一些麻烦,离得很近但并不完全在那里。我查看了其他答案,但似乎没有一个完全捕捉到这一点。
一个图书馆群有一个共享系统,它有多个位置,最终目标是找到一个有库存的图书列表。每个图书馆成员仅是一个位置的成员,因此尽管系统是共享的,但需要比较的库存和后续结账都与给定位置相关联。
相关表格如下:
book_inventory (id, book_id, location_id, quantity)
membership (id, location_id, user_id)
book_checkout(id, membership_id, book_id, date_from, date_to)
到目前为止,这是我想出的(将“:locationid”替换为应该查找的位置的id),但它忽略了COUNT()返回null的行。如此有效地,它返回所有有库存且当前已签出一本或多本的书籍。它需要退回这本书以及任何有库存但没有签出任何副本的书籍。
SELECT b.book_id, b.quantity FROM book_inventory b
LEFT JOIN book_checkout c ON c.book_id = b.book_id AND c.date_to IS NULL
INNER JOIN membership m ON m.id = c.membership_id AND m.location_id=:locationid
GROUP BY b.book_id HAVING b.quantity < COUNT(IFNULL(c.id, 0))
提前感谢您的任何见解!