在Count()查询

时间:2017-12-26 22:09:37

标签: sql sql-server

我在查询结果中显示0时遇到问题

这是我的疑问:

select book.title, count(bookInstance.iid) as instancesAvaiable from book
                    left join bookInstance on book.isbn = bookInstance.isbn where bookInstance.iid not in
                    (select lease.iid from lease inner join bookInstance on bookInstance.iid = lease.iid)
                    group by book.title

我们说我有2本书" title1"和" title2"在我的图书馆里有#34; title1"和2份" title2"但是" title2"书籍是出租的,所以我的查询我希望得到图书馆中没有租用的副本数量(bookInstances)。 预期结果将是
" TITLE1"有1个实例 " TITLE2"有0个实例 但在我的结果中,我只得到了#34; title1"
起初我认为左连接可以做到这一点,但它没有,如果我用内连接替换它我会得到相同的结果。
有任何想法吗?

2 个答案:

答案 0 :(得分:0)

您的where条件位于第二个表中,因此它必须位于on子句中。否则,left join将成为内部联接。

我还假设你想要一个相关的子查询:

select b.title, count(bi.iid) as instancesAvaiable
from book b left join
     bookInstance bi
     on b.isbn = bi.isbn and
        bi.iid not in (select l.iid
                       from lease l 
                       where bi.iid = l.iid
                      )
group by b.title;

答案 1 :(得分:0)

问题可能是由于WHERE条件正在切断标题2条目。左连接无法工作,因为在完成连接后执行了WHERE。尝试在联接的WHERE子句中使用ON条件。

select book.title, count(b.iid) as instancesAvaiable 
from 
book left join bookInstance b
ON book.isbn = b.isbn AND
b.iid not in (
select lease.iid from lease inner join bookInstance on bookInstance.iid = lease.iid)
group by book.title;