Я пытаюсь сделать оператор подсчета для базы данных.Каждая книга может быть в нескольких категориях (например, ужасы и вымысел), поэтому я попробовал следующее утверждение, но я просто получаю 0, когда пытаюсь получить вторую категорию.Любая помощь будет принята с благодарностью.
SELECT count(*) as count FROM book Inner JOIN bookscategories ON book.bookid = bookscategories.bookid WHERE bookscategories.categoryid = 3 AND bookscategories.categoryid = 4
categoryid нельзя установить одновременно на 3 и 4, что вы проверяете, когда используете AND. Вам, вероятно, придется вместо этого использовать OR, или же вы можете использовать предложение IN:
categoryid
AND
OR
IN
WHERE bookcategories.categoryid = 3 OR bookcategories.categoryid = 4
... или ...
WHERE bookcategories.categoryid IN (3, 4)
В этом sql предполагается, что вы хотите найти количество книг, относящихся как к категории 3, так и к категории 4. Другие ответы относятся к категории 3 или категории 4
SELECT count(*) as count FROM book Inner JOIN bookscategories bc ON b.bookid = bc.bookid Inner JOIN bookscategories bc2 ON book.bookid = bc2.bookid WHERE bc.categoryid = 3 AND bc2.categoryid = 4
Если вы хотите количество для каждой категории:
SELECT bookscategories.categoryid, count(book.bookid) as count FROM book Inner JOIN bookscategories ON book.bookid = bookscategories.bookid AND bookscategories.categoryid in (3, 4) GROUP BY bookscategories.categoryid
Вы должны понимать, что SQL работает с декартовыми произведениями таблиц.
В вашем запросе у вас будет
book1 book1cat1 book1 book1cat2
Вы просите, чтобы для каждой записи book1cat13 и 4. Это невозможно, так как это может быть только один из них.