Why not just use
SELECT a.order_id FROM
(SELECT order_id, book_id, COUNT(*)
FROM a_bkorders.order_details
GROUP BY order_id, book_id
HAVING count(*)>1
) AS a
Technically speaking, you should use SELECT DISTINCT (since one order might have two book ids, each of which were ordered twice). But otherwise this should do the job (you follow the logic, yes? It's using a subquery to find out which order and book ids occur in tandem more than once; from there it's grabbing the order_ids from that list of order_id, book_id, and count() for which count() > 1).
Now, this is all pending a certain assumption that "if any book was ordered more than once in the same order" --> any book that shows up as a line item twice (eg count()> 1), not any book for which quantity > 1 (eg count() >1 or quantity > 1)
If you need to check if quantity > 1 or count(*) greater than one, I'd recommend the following:
SELECT a.order_id FROM
(SELECT order_id, book_id, SUM(quantity)
FROM a_bkorders.order_details
GROUP BY order_id, book_id
HAVING SUM(quantity) > 1
) AS a
If it's not apparent, the SUM(quantity) will > 1 if count(*) > 1. It will also > 1 if quantity > 1 as well.