2011-06-20 80 views
0

我正在嘗試爲數據庫執行一條計數語句。每本書都可以有多種類型(例如:恐怖和虛構),所以我嘗試了下面的陳述,但是當我嘗試獲得第二類時,我只得到0。任何援助將不勝感激。計數聲明一對多關係

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

'bookscategories.categoryid'不能等於3和4的同時;-)順便說一下,問題是不明確的,嘗試重組它。 – zerkms

回答

6

categoryid不能在同一時間,這是你當你使用AND測試的內容設置爲兩個3和4。你可能需要使用OR代替,或者你也可以使用一個IN條款:

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

......或者......

WHERE bookcategories.categoryid IN (3, 4) 
+1

如果它是OP想要的 - 將條件移到「ON」部分也是一個好主意 – zerkms

2

這個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

你必須明白,SQL的工作原理與笛卡爾PROD桌子。

在您的查詢,你必須

book1 book1cat1 
book1 book1cat2 

你問的是,對於每個記錄,book1cat1既是3和4這是不可能的,因爲它只能是其中之一。

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