计数声明一对多关系与哪里

时间:2011-06-20 23:34:17

标签: mysql sql

我正在尝试为数据库执行count语句。每本书都可以分为多个类别(例如:恐怖片和小说片),所以我尝试了下面的陈述,但是当我尝试获得第二类时,我只得到0。非常感谢任何帮助。

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

4 个答案:

答案 0 :(得分:6)

categoryid无法同时设置为3和4,这是您在使用AND时要测试的内容。您可能需要使用OR代替,或者您可以使用IN子句:

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

......或......

WHERE bookcategories.categoryid IN (3, 4)

答案 1 :(得分:2)

这个sql假设您要查找类别3和类别4中的书籍数量。其他答案在cat 3或cat 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

答案 2 :(得分:0)

您必须了解SQL适用于表的笛卡尔积。

在您的查询中,您将拥有

book1   book1cat1
book1   book1cat2

你要问的是,对于每条记录,book1cat1都是3和4.这是不可能的,因为它只能是其中之一。

答案 3 :(得分:0)

如果您想要每个类别的计数:

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