有一个简单的问题,我坚持并需要一些帮助。
我在Oracle 10g中有两个不同的表,称为BOOK_DETAILS
(主键 - book_code
)和BOOK_ISSUE
(外键和主键 - 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作为结果。所以对此的解释也将受到高度赞赏。
答案 0 :(得分:3)
您可以通过以下方式获取(图书总数 - 状态为“Y”的图书):
select
(select count(book_code) from BOOK_DETAILS) -
(select count(book_code) from BOOK_ISSUE where book_issue_status='Y')
from dual
答案 1 :(得分:0)
这是一个基本错误,count(col)
使用非空值获取查询中的行数。
你得到0只是因为2个计数给了相同的数字。
在这种情况下,您甚至没有将“i.book_code = b.book_code”加入2个表
但即使它会让你回归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并且不计算在内。