0

我遇到了一个简单的问题,需要一些帮助。

我在 Oracle 10g 中有两个不同的表,分别称为BOOK_DETAILS(primary key- book_code) 和BOOK_ISSUE(foreign and primary key- book_code)。该BOOK_ISSUE表还有一个名为BOOK_ISSUE_STATUS“y”或“n”值的列,具体取决于该书是否已发行。

现在我必须做以下简单的查询——找出图书馆中可用的书籍数量(即可用书籍的总数-已发行的书籍数量)。

所以我尝试执行以下查询:-

 select count(b.book_code)-count(i.book_code)
 from 
 lms_book_issue i, lms_book_details b
 where
 i.book_issue_status='Y'
 ;

但显然我没有得到想要的结果。我的逻辑是从计算表中书籍数量的结果中减去已发行书籍数量的结果(我从BOOK_ISSUE表中得到)BOOK_DETAILS

请让我知道我哪里错了。此外,上述查询仅给出 0 作为结果。因此,对此的解释也将受到高度赞赏。

4

2 回答 2

3

您可以通过以下方式获得(书籍总数 - 状态为“Y”的书籍):

select 
          (select count(book_code) from BOOK_DETAILS) - 
          (select count(book_code) from BOOK_ISSUE where book_issue_status='Y')
from dual
于 2012-12-24T07:24:49.927 回答
0

这是一个基本错误,count(col)获取查询中具有非空值的行数。

你得到 0 仅仅是因为 2 个计数给出了相同的数字。

在这种情况下,您甚至没有将 2 个表与“i.book_code = b.book_code”连接在一起

但即使它会给你返回0,

以您的方式,正确的选择是:

select 
    count(b.book_code) - count(i.book_code)
from 
    lms_book_issue i, lms_book_details b
where
    b.book_code = i.book_code(+) AND
    i.book_issue_status = 'Y'
;

这样,您选择了所有书籍和书籍,并且仅与问题选项卡一起加入只有问题 = Y 的行,因此第一个计数将为您提供书籍的数量,第二个将仅计算已发行的书籍,因为其余的将为 NULL 并且不会计数。

于 2012-12-26T02:18:39.543 回答