0

(単純な) SQL クエリに問題があります。

背景は、それぞれBookに1つ(または複数)定義されています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

値が 1 の 9 行を取得します (これは言語数です。AND bls.BookLanguageID = 25条件を削除すると、値が 1 または 2 の 9 行が取得されるためです。一部の本では 2 つの言語が定義されているためです)。

つまり、ポイントは - 99 行の代わりに数字だけを取得する方法です。

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と noを試してください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 に答える