select b.bookid, b.author, b.title, group_concat(distinct c.categorydesc)
from book as b
inner join bookcategories as bc on b.bookid = bc.bookid
inner join categories as c on bc.categoryid = c.categoryid
where b.bookid in (select bc1.bookid
from bookcategories as bc1
inner join bookcategories as bc2 on bc1.bookid = bc2.bookid
where bc1.categoryid = 1 and bc2.categoryid = 2)
group by b.bookid;
Я не уверен насчет производительности этого запроса, поскольку он использует таблицу bookcategories 3 раза.
Выбор b.author и b.title технически некорректен, но в этом случае должен работатьпотому что b.bookid, вероятно, уникален.В противном случае невозможно выбрать что-то, что не является частью предложения group by или не используется в статистической функции.
Я считаю, что код, который вы опубликовали, всегда будет возвращать пустой набор результатов, поскольку вы ограничиваете категорию.categoryid быть одновременно 1 и 2.