我在查询结果中显示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"
起初我认为左连接可以做到这一点,但它没有,如果我用内连接替换它我会得到相同的结果。
有任何想法吗?
答案 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;