Считать заявление один ко многим отношения с где - PullRequest
0 голосов
/ 21 июня 2011

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

SELECT count(*) as count FROM book
Inner JOIN bookscategories ON book.bookid = bookscategories.bookid
WHERE bookscategories.categoryid = 3 AND bookscategories.categoryid = 4

Ответы [ 4 ]

6 голосов
/ 21 июня 2011

categoryid нельзя установить одновременно на 3 и 4, что вы проверяете, когда используете AND. Вам, вероятно, придется вместо этого использовать OR, или же вы можете использовать предложение IN:

WHERE bookcategories.categoryid = 3 OR bookcategories.categoryid = 4

... или ...

WHERE bookcategories.categoryid IN (3, 4)
2 голосов
/ 21 июня 2011

В этом 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
0 голосов
/ 21 июня 2011

Если вы хотите количество для каждой категории:

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
0 голосов
/ 21 июня 2011

Вы должны понимать, что SQL работает с декартовыми произведениями таблиц.

В вашем запросе у вас будет

book1   book1cat1
book1   book1cat2

Вы просите, чтобы для каждой записи book1cat13 и 4. Это невозможно, так как это может быть только один из них.

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