Подзапрос, чтобы показать все другие категории отношения один ко многим - PullRequest
0 голосов
/ 19 июня 2011

Я пытаюсь создать запрос, в котором я могу просмотреть все книги, относящиеся как к категории 1, так и к категории 2 (например, ужасы и вымысел), но также показать категории, к которым эта книга также принадлежит. Как мне это сделать? Я могу только предположить, что мне понадобится рекурсивный подзапрос, однако это может быть неэффективно.

SELECT book.bookid,
       book.author,
       book.title,
       Group_concat(DISTINCT category.categorydesc)
FROM   book,
       bookscategories,
       category
WHERE  book.bookid = bookscategories.bookid
       AND bookscategories.categoryid = category.categoryid
       AND category.categoryid = 1
       AND category.categoryid = 2
GROUP  BY book.bookid;

1 Ответ

1 голос
/ 19 июня 2011
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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...