2017-12-26 9 views
0

私は0を表示するいくつかの問題を抱えている表示件数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」を持っていると言ってみましょう私の図書館には "title1"と "title2"の2つのコピーがありますが、どちらも "title2"の本がリースされていましたので、私は図書館でコピー数(bookInstances)を得ることを望んでいましたリースされていない。 期待される結果は以下のようになり
「TITLE1」は1 instancesAvaiable
「TITLE2」持っ0 instancesAvaiable
が、私の結果に私は左のみがトリックを行うだろう参加思った「TITLE1」まず
を取得していますしかし、そうではありません。私が内部結合に置き換えた場合、私は同じ結果になります。
アイデア

答えて

0

whereの条件は2番目のテーブルにありますので、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; 
+0

ああ、TILについては、条件は、 ありがとう! – Iwishiwassmart

0

問題が原因タイトル2エントリをオフにチョッピングされWHERE状態にある可能性があります。結合が完了した後にWHEREが実行されるため、左結合は機能しません。結合のON句自体にWHERE条件を使用してみてください。

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;