0

我对(简单)SQL 查询有疑问。

背景是,每个Book都有一个(或多个)定义BookLanguages

该查询返回 9 本书,这是可以的。

SELECT b.BookID
FROM Book b
JOIN BookLanguages bls ON b.BookID = bls.BookID
WHERE b.IsActive= 1 
       AND
        bls.BookLanguageID = 25
GROUP BY b.BookID

但是,我必须有符合该标准的总书数(用于分页目的)。

如果我只是运行该查询

SELECT COUNT(b.BookID)
FROM Book b
JOIN BookLanguages bls ON b.BookID = bls.BookID
WHERE b.IsActive= 1 
       AND
        bls.BookLanguageID = 25
GROUP BY b.BookID

我得到 9 行,值为 1(这是语言计数,因为当我删除AND bls.BookLanguageID = 25条件时,我得到 9 行,值为 1 或 2 - 因为有些书定义了 2 种语言)

所以,关键是 - 如何只获得9数字而不是 9 行?

4

2 回答 2

3

删除组

Select
  Count(*)
From
  Book b
    Inner Join
  BookLanguages bls 
    On b.BookID = bls.BookID
Where
  b.IsActive= 1 And
  bls.BookLanguageID = 25
于 2012-12-07T14:45:40.627 回答
2

尝试使用DISTINCT和否GROUP BY

SELECT COUNT(DISTINCT b.BookID)
FROM Book b
JOIN BookLanguages bls ON b.BookID = bls.BookID
WHERE b.IsActive= 1 
       AND
        bls.BookLanguageID = 25

GROUPing BY Id 为 Id 的每个值返回一行,因此在您的情况下为 9 行。

于 2012-12-07T14:42:28.053 回答