我正在尝试为数据库执行count语句。每本书都可以分为多个类别(例如:恐怖片和小说片),所以我尝试了下面的陈述,但是当我尝试获得第二类时,我只得到0。非常感谢任何帮助。
SELECT count(*) as count FROM book
Inner JOIN bookscategories ON book.bookid = bookscategories.bookid
WHERE bookscategories.categoryid = 3 AND bookscategories.categoryid = 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