【发布时间】:2018-07-06 19:12:41
【问题描述】:
我有一个图书馆 (books) 和另一个桌子,每次有人借书或带回一本书时,它都会被记录下来 (book_loans)。
基本上我想查看在某个时间签出的所有书籍,有多少:
- 属于“奇幻”类型
- 超过 500 页
- 是精装书
我想一次完成所有这些,我现在使用 4 个查询,有没有更好的方法?
PS:book_loans.bookID 是books.id 的外键:
SELECT * FROM
(
SELECT COUNT(*) FROM `books` AS bks
INNER JOIN `book_loans` AS bs ON bks.id = bs.bookID
WHERE bs.time = '2017-07-01 02:16:00' AND bs.signedout = 1 AND bks.genre = 'fantasy'
UNION
SELECT COUNT(*) FROM `books` AS bks
INNER JOIN `book_loans` AS bs ON bks.id = bs.bookID
WHERE bs.time = '2017-07-01 02:16:00' AND bs.signedout = 1 AND bks.pages > 500
UNION
SELECT COUNT(*) FROM `books` AS bks
INNER JOIN `book_loans` AS bs ON bks.id = bs.bookID
WHERE bs.time = '2017-07-01 02:16:00' AND bs.signedout = 1 AND bks.hardcover = 1
) x;
为此总共执行 4 个查询似乎效率很低。
【问题讨论】:
标签: mysql sql select foreign-keys union