-1

私が試してみました

select title
from BOOKS B, AUTHOR A, LOANS U
where a.author_id = b.author_id
and not B.book_id = U.book_id
order by A.name

select title
from BOOKS B, AUTHOR A, LOANS U
where b.author_id = a.author_id
and not b.book_id in (select u.book_id from LOANS)
order by A.name, b.title

必要なのは、サブクエリの結果だけですselect u.book_id from LOANS

基本的に、テーブル LOANS には、図書館から貸与された book_id のリストが含まれています。

まだ借りていない book_id が必要です。次に、著者の名前でアルファベット順に並べ替える必要があります(したがって、order by A.name

注: 本を含むテーブルには、author_id のみが含まれます。著者の名前を取得するには、その author_id をテーブル AUTHOR の ID と比較する必要があります。

私が間違っていること、または間違った方法を使用している場合は、代わりにどの方法を使用するかを教えてくれる人はいますか?

4

3 に答える 3

1

クエリはLoansテーブルに参加しますが、行がない結果を含めようとしますLoans。の結合を削除すると、2 番目のクエリが機能するはずですLoans。最初LEFT OUTER JOINU.Book_Id is NULL.

ちなみに、サブクエリは修飾された column を返しますu.book_id。select from で期待することはできませんLoans

于 2012-10-10T17:29:37.927 に答える
1

これにより、以前に貸出されたことのない本のタイトルが選択されます。これは、ステートメントを使用して BOOKS から表にないNOT INタイトルを返すことで確認できます。book_idLOANS

SELECT b.title
FROM BOOKS b
INNER JOIN AUTHORS a ON a.author_id = b.author_id 
WHERE b.book_id NOT IN (
    SELECT book_id FROM LOANS
)
ORDER BY a.[Name]

WHEREステートメントを使用する代わりに、ANSI 結合構文を使用する必要があります。

于 2012-10-10T17:20:02.433 に答える
0

見つけました。 FROM BOOKS B, AUTHOR A, LOANS U でなければならなかったFROM BOOKS B, AUTHOR A

最終的に機能した私のコード:

select title
from BOOKS B, AUTHOR A
where b.author_id = a.author_id
and not b.book_id in (select u.book_id from LOANS U)
order by A.name
于 2012-10-10T17:28:49.723 に答える